// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s // expected-no-diagnostics #if !__has_feature(cxx_access_control_sfinae) # error No support for access control as part of SFINAE? #endif typedef char yes_type; typedef char (&no_type)[2]; template<unsigned N> struct unsigned_c { }; template<typename T> class has_copy_constructor { static T t; template<typename U> static yes_type check(unsigned_c<sizeof(U(t))> * = 0); template<typename U> static no_type check(...); public: static const bool value = (sizeof(check<T>(0)) == sizeof(yes_type)); }; struct HasCopy { }; struct HasNonConstCopy { HasNonConstCopy(HasNonConstCopy&); }; struct HasDeletedCopy { HasDeletedCopy(const HasDeletedCopy&) = delete; }; struct HasPrivateCopy { private: HasPrivateCopy(const HasPrivateCopy&); }; int check0[has_copy_constructor<HasCopy>::value? 1 : -1]; int check1[has_copy_constructor<HasNonConstCopy>::value? 1 : -1]; int check2[has_copy_constructor<HasDeletedCopy>::value? -1 : 1]; int check3[has_copy_constructor<HasPrivateCopy>::value? -1 : 1];