pr25811-2.C: New.

2011-05-26  Fabien Chene  <fabien@gcc.gnu.org>
	* g++.dg/init/pr25811-2.C: New.
	* g++.dg/init/pr25811-3.C: New.
	* g++.dg/init/pr25811-4.C: New.

From-SVN: r174263
This commit is contained in:
Fabien Chêne 2011-05-26 07:54:08 +02:00
parent 53febcba13
commit c6bdd05e3a
3 changed files with 81 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2011-05-26 Fabien Chêne <fabien@gcc.gnu.org>
* g++.dg/init/pr25811-2.C: New.
* g++.dg/init/pr25811-3.C: New.
* g++.dg/init/pr25811-4.C: New.
2011-05-25 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/enum17.C: New.

View File

@ -0,0 +1,38 @@
// { dg-do compile }
struct A { int const i; };
struct B { int& i; };
struct C { int i; };
template< class T >
class is_constructible_via_new_without_initializer
{
template<int> class size {};
typedef char yes_type;
struct no_type { char data[2]; };
template <class U>
static yes_type sfinae (size< sizeof (new U) >*);
template <class U>
static no_type sfinae (...);
public:
static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
};
#define JOIN( X, Y ) DO_JOIN( X, Y )
#define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
#define DO_JOIN2( X, Y ) X##Y
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
#else
# define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
#endif
STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);

View File

@ -0,0 +1,38 @@
// { dg-do compile }
// { dg-options "-fpermissive" }
struct A { int const i; };
struct B { int& i; };
struct C { int i; };
template< class T >
class is_constructible_via_new_without_initializer
{
template<int> class size {};
typedef char yes_type;
struct no_type { char data[2]; };
template <class U>
static yes_type sfinae (size< sizeof (new U) >*);
template <class U>
static no_type sfinae (...);
public:
static const bool value = sizeof (sfinae<T>(0)) == sizeof (yes_type);
};
#define JOIN( X, Y ) DO_JOIN( X, Y )
#define DO_JOIN( X, Y ) DO_JOIN2(X,Y)
#define DO_JOIN2( X, Y ) X##Y
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# define STATIC_ASSERT(Expr) static_assert(Expr, #Expr)
#else
# define STATIC_ASSERT(Expr) int JOIN(a,__LINE__)[Expr? 1 : -1]
#endif
STATIC_ASSERT (!is_constructible_via_new_without_initializer<A>::value);
STATIC_ASSERT (!is_constructible_via_new_without_initializer<B>::value);
STATIC_ASSERT (is_constructible_via_new_without_initializer<C>::value);