diff options
author | Ville Voutilainen <ville.voutilainen@gmail.com> | 2016-12-16 13:34:45 +0200 |
---|---|---|
committer | Ville Voutilainen <ville@gcc.gnu.org> | 2016-12-16 13:34:45 +0200 |
commit | 62549523462ea288aebd4e476bb33169bbe0a293 (patch) | |
tree | 7b9f82a4f8271aa9bbfad13dac55d30a9f1d1557 /libstdc++-v3/testsuite | |
parent | b7fc43d7c747d190e197ca89cfce4f1d9def7c7e (diff) | |
download | gcc-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.cc | 13 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/any/misc/any_cast_neg.cc | 2 |
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 } } |