summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@gmail.com>2016-12-16 13:34:45 +0200
committerVille Voutilainen <ville@gcc.gnu.org>2016-12-16 13:34:45 +0200
commit62549523462ea288aebd4e476bb33169bbe0a293 (patch)
tree7b9f82a4f8271aa9bbfad13dac55d30a9f1d1557 /libstdc++-v3/testsuite
parentb7fc43d7c747d190e197ca89cfce4f1d9def7c7e (diff)
downloadgcc-62549523462ea288aebd4e476bb33169bbe0a293.tar.gz
Implement LWG 2769, Redundant const in the return type of any_cast(const any&).
Implement LWG 2769, Redundant const in the return type of any_cast(const any&). * include/std/any (_AnyCast): New. (any_cast(const any&)): Use it and add an explicit cast for return. (any_cast(any&)): Likewise. (any_cast(any&&)): Likewise. * testsuite/20_util/any/misc/any_cast.cc: Add a test for a type that has an explicit copy constructor. *testsuite/20_util/any/misc/any_cast_neg.cc: Adjust. From-SVN: r243739
Diffstat (limited to 'libstdc++-v3/testsuite')
-rw-r--r--libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc13
-rw-r--r--libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc2
2 files changed, 14 insertions, 1 deletions
diff --git a/libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc b/libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc
index 96f9419e070..f3ae5927904 100644
--- a/libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc
+++ b/libstdc++-v3/testsuite/20_util/any/misc/any_cast.cc
@@ -106,9 +106,22 @@ void test03()
MoveDeleted&& md3 = any_cast<MoveDeleted&&>(any(std::move(md)));
}
+void test04()
+{
+ struct ExplicitCopy
+ {
+ ExplicitCopy() = default;
+ explicit ExplicitCopy(const ExplicitCopy&) = default;
+ };
+ any x = ExplicitCopy();
+ ExplicitCopy ec{any_cast<ExplicitCopy>(x)};
+ ExplicitCopy ec2{any_cast<ExplicitCopy>(std::move(x))};
+}
+
int main()
{
test01();
test02();
test03();
+ test04();
}
diff --git a/libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc b/libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc
index 4de400d717e..a8a1ca9fd0a 100644
--- a/libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc
@@ -26,5 +26,5 @@ void test01()
using std::any_cast;
const any y(1);
- any_cast<int&>(y); // { dg-error "qualifiers" "" { target { *-*-* } } 453 }
+ any_cast<int&>(y); // { dg-error "invalid static_cast" "" { target { *-*-* } } 455 }
}