OSDN Git Service

2011-05-26 Fabien Chene <fabien@gcc.gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / init / pr25811-3.C
1 // { dg-do compile }
2
3 struct A { int const i; };
4 struct B { int& i; };
5 struct C { int i; };
6
7 template< class T >
8 class is_constructible_via_new_without_initializer
9 {
10     template<int> class size {};
11
12     typedef char yes_type;
13     struct no_type { char data[2]; };
14
15     template <class U>
16     static yes_type sfinae (size< sizeof (new U) >*);
17
18     template <class U>
19     static no_type sfinae (...);
20
21 public:
22   static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
23 };
24
25 #define JOIN( X, Y ) DO_JOIN( X, Y )
26 #define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
27 #define DO_JOIN2( X, Y ) X##Y
28
29 #ifdef __GXX_EXPERIMENTAL_CXX0X__
30 #  define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
31 #else
32 #  define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
33 #endif
34
35 STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
36 STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
37 STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);
38