aboutsummaryrefslogtreecommitdiff
path: root/test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp')
-rw-r--r--test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp36
1 files changed, 27 insertions, 9 deletions
diff --git a/test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp b/test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp
index 65d94fd1e0a4..75dfb0a2e704 100644
--- a/test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp
+++ b/test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp
@@ -11,9 +11,9 @@
// <any>
-// template <class T, class ...Args> emplace(Args&&...);
+// template <class T, class ...Args> T& emplace(Args&&...);
// template <class T, class U, class ...Args>
-// void emplace(initializer_list<U>, Args&&...);
+// T& emplace(initializer_list<U>, Args&&...);
#include <any>
#include <cassert>
@@ -42,7 +42,9 @@ void test_emplace_type() {
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>();
+ auto &v = a.emplace<Type>();
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
assert(Tracked::count == 0);
assert(Type::count == 1);
@@ -56,7 +58,9 @@ void test_emplace_type() {
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>(101);
+ auto &v = a.emplace<Type>(101);
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
assert(Tracked::count == 0);
assert(Type::count == 1);
@@ -70,7 +74,9 @@ void test_emplace_type() {
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>(-1, 42, -1);
+ auto &v = a.emplace<Type>(-1, 42, -1);
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
assert(Tracked::count == 0);
assert(Type::count == 1);
@@ -89,14 +95,20 @@ void test_emplace_type_tracked() {
{
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>();
+ auto &v = a.emplace<Type>();
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
+
assert(Tracked::count == 0);
assertArgsMatch<Type>(a);
}
{
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>(-1, 42, -1);
+ auto &v = a.emplace<Type>(-1, 42, -1);
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
+
assert(Tracked::count == 0);
assertArgsMatch<Type, int, int, int>(a);
}
@@ -104,7 +116,10 @@ void test_emplace_type_tracked() {
{
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>({-1, 42, -1});
+ auto &v = a.emplace<Type>({-1, 42, -1});
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
+
assert(Tracked::count == 0);
assertArgsMatch<Type, std::initializer_list<int>>(a);
}
@@ -112,7 +127,10 @@ void test_emplace_type_tracked() {
int x = 42;
any a(std::in_place_type<Tracked>);
assert(Tracked::count == 1);
- a.emplace<Type>({-1, 42, -1}, x);
+ auto &v = a.emplace<Type>({-1, 42, -1}, x);
+ static_assert( std::is_same_v<Type&, decltype(v)>, "" );
+ assert(&v == std::any_cast<Type>(&a));
+
assert(Tracked::count == 0);
assertArgsMatch<Type, std::initializer_list<int>, int&>(a);
}