diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C')
-rw-r--r-- | gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C new file mode 100644 index 0000000..1224f36 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/dyncast1.C @@ -0,0 +1,31 @@ +// PR c++/57599 +// { dg-do compile { target c++11 } } + +struct A { }; +struct B : public A { }; + +template<class, class> +struct is_same { static constexpr bool value = false; }; + +template<class T> +struct is_same<T, T> { static constexpr bool value = true; }; + +template<class T> +T val(); + +static_assert(is_same<decltype(dynamic_cast<A*>(val<B*>())), + A*>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<A&>(val<B&>())), + A&>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<const A*>(val<B*>())), + const A*>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<const A&>(val<B&>())), + const A&>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<volatile A*>(val<B*>())), + volatile A*>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<volatile A&>(val<B&>())), + volatile A&>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<const volatile A*>(val<B*>())), + const volatile A*>::value, "Ouch"); +static_assert(is_same<decltype(dynamic_cast<const volatile A&>(val<B&>())), + const volatile A&>::value, "Ouch"); |