Add acquire() to maybe_t

Easy way to pull the value out.
This commit is contained in:
ridiculousfish 2018-04-01 16:10:59 -07:00
parent 5b489ca30f
commit 222a45f07a
2 changed files with 14 additions and 0 deletions

View file

@ -4491,6 +4491,12 @@ void test_maybe() {
do_test(m4 && *m4 == "hi");
maybe_t<std::string> m5 = m0;
do_test(!m5);
maybe_t<std::string> acquire_test("def");
do_test(acquire_test);
std::string res = acquire_test.acquire();
do_test(!acquire_test);
do_test(res == "def");
}
void test_layout_cache() {

View file

@ -64,6 +64,14 @@ class maybe_t {
return *reinterpret_cast<const T *>(storage);
}
// Transfer the value to the caller.
T acquire() {
assert(filled && "maybe_t does not have a value");
T res = std::move(value());
reset();
return res;
}
// Clear the value.
void reset() {
if (filled) {