summaryrefslogtreecommitdiff
path: root/test/std/utilities/optional
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-04-26 19:24:31 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-04-26 19:24:31 +0000
commit2fa809d9eabddd820af54059faa8362dd50b51de (patch)
treed24999651df3a7a5d330d20573335db9a8afcc89 /test/std/utilities/optional
parent1c3313bd0215c89fb38710a1ea0762ccf32e859c (diff)
Notes
Diffstat (limited to 'test/std/utilities/optional')
-rw-r--r--test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.object/optional.object.assign/emplace_initializer_list.pass.cpp18
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 0696c11526d5..e7f59f1a94ca 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 1c3c69a70303..f6959c7e9cfd 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)
{