reference, declaration → definition definition → references, declarations, derived classes, virtual overrides reference to multiple definitions → definitions unreferenced |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // 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]; |