// PR c++/56039 // { dg-do compile { target c++11 } } template struct BoolSink { typedef void type; }; template struct AddRvalueReferenceImpl { typedef T type; }; template struct AddRvalueReferenceImpl::type> { typedef T &&type; }; template struct AddRvalueReference : AddRvalueReferenceImpl { }; namespace ImplHelpers { template typename AddRvalueReference::type create(void); } template struct IsConstructibleImpl { enum { value = 0 }; }; template struct IsConstructibleImpl() ...); } // { dg-error "" } >::type, Args ...> { enum { value = 1 }; }; template struct IsConstructible : IsConstructibleImpl { }; struct DestroyMe { ~DestroyMe() = delete; }; static_assert(+IsConstructible::value, "error"); static_assert(!IsConstructible::value, "error"); static_assert(+IsConstructible::value, "error"); static_assert(!IsConstructible::value, "error"); static_assert(!IsConstructible::value, "error"); static_assert(+IsConstructible::value, "error"); static_assert(!IsConstructible::value, "error"); static_assert(+IsConstructible::value, "error"); // { dg-prune-output "expected" } // { dg-prune-output "does not name a class" } // { dg-prune-output "static assertion" } // { dg-prune-output "template argument . is invalid" }