diff options
Diffstat (limited to 'test/std/utilities/optional')
2 files changed, 16 insertions, 6 deletions
diff --git a/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp b/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp index 0696c11526d59..e7f59f1a94cae 100644 --- a/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp +++ b/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp @@ -254,7 +254,9 @@ int main() { assert(static_cast<bool>(opt) == true); assert(Y::dtor_called == false); - opt.emplace(1); + auto &v = opt.emplace(1); + static_assert( std::is_same_v<Y&, decltype(v)>, "" ); + assert(false); } catch (int i) { diff --git a/test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp b/test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp index 1c3c69a70303d..f6959c7e9cfd1 100644 --- a/test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp +++ b/test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp @@ -11,7 +11,7 @@ // <optional> // template <class U, class... Args> -// void optional<T>::emplace(initializer_list<U> il, Args&&... args); +// T& optional<T>::emplace(initializer_list<U> il, Args&&... args); #include <optional> #include <type_traits> @@ -76,21 +76,27 @@ int main() X x; optional<X> opt(x); assert(X::dtor_called == false); - opt.emplace({1, 2}); + auto &v = opt.emplace({1, 2}); + static_assert( std::is_same_v<X&, decltype(v)>, "" ); assert(X::dtor_called == true); assert(*opt == X({1, 2})); + assert(&v == &*opt); } { optional<std::vector<int>> opt; - opt.emplace({1, 2, 3}, std::allocator<int>()); + auto &v = opt.emplace({1, 2, 3}, std::allocator<int>()); + static_assert( std::is_same_v<std::vector<int>&, decltype(v)>, "" ); assert(static_cast<bool>(opt) == true); assert(*opt == std::vector<int>({1, 2, 3})); + assert(&v == &*opt); } { optional<Y> opt; - opt.emplace({1, 2}); + auto &v = opt.emplace({1, 2}); + static_assert( std::is_same_v<Y&, decltype(v)>, "" ); assert(static_cast<bool>(opt) == true); assert(*opt == Y({1, 2})); + assert(&v == &*opt); } #ifndef TEST_HAS_NO_EXCEPTIONS { @@ -100,7 +106,9 @@ int main() { assert(static_cast<bool>(opt) == true); assert(Z::dtor_called == false); - opt.emplace({1, 2}); + auto &v = opt.emplace({1, 2}); + static_assert( std::is_same_v<Z&, decltype(v)>, "" ); + assert(false); } catch (int i) { |