Rebase.
[official-gcc.git] / gcc / testsuite / g++.dg / init / pr25811-4.C
blobabfb3d9f3c53170d3494a46457872ed2e58c63c1
1 // { dg-do compile }
2 // { dg-options "-fpermissive" }
4 struct A { int const i; };
5 struct B { int& i; };
6 struct C { int i; };
8 template< class T >
9 class is_constructible_via_new_without_initializer
11     template<int> class size {};
13     typedef char yes_type;
14     struct no_type { char data[2]; };
16     template <class U>
17     static yes_type sfinae (size< sizeof (new U) >*);
19     template <class U>
20     static no_type sfinae (...);
22 public:
23   static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
26 #define JOIN( X, Y ) DO_JOIN( X, Y )
27 #define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
28 #define DO_JOIN2( X, Y ) X##Y
30 #ifdef __GXX_EXPERIMENTAL_CXX0X__
31 #  define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
32 #else
33 #  define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
34 #endif
36 STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
37 STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
38 STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);