Home | History | Annotate | Download | only in meta.unary.prop
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // type_traits
     11 
     12 // template <class T, class... Args>
     13 //   struct is_constructible;
     14 
     15 #include <type_traits>
     16 
     17 struct A
     18 {
     19     explicit A(int);
     20     A(int, double);
     21 #if __has_feature(cxx_access_control_sfinae)
     22 private:
     23 #endif
     24     A(char);
     25 };
     26 
     27 template <class T>
     28 void test_is_constructible()
     29 {
     30     static_assert( (std::is_constructible<T>::value), "");
     31 }
     32 
     33 template <class T, class A0>
     34 void test_is_constructible()
     35 {
     36     static_assert( (std::is_constructible<T, A0>::value), "");
     37 }
     38 
     39 template <class T, class A0, class A1>
     40 void test_is_constructible()
     41 {
     42     static_assert( (std::is_constructible<T, A0, A1>::value), "");
     43 }
     44 
     45 template <class T>
     46 void test_is_not_constructible()
     47 {
     48     static_assert((!std::is_constructible<T>::value), "");
     49 }
     50 
     51 template <class T, class A0>
     52 void test_is_not_constructible()
     53 {
     54     static_assert((!std::is_constructible<T, A0>::value), "");
     55 }
     56 
     57 int main()
     58 {
     59     test_is_constructible<int> ();
     60     test_is_constructible<int, const int> ();
     61     test_is_constructible<A, int> ();
     62     test_is_constructible<A, int, double> ();
     63     test_is_constructible<int&, int&> ();
     64 
     65     test_is_not_constructible<A> ();
     66 #if __has_feature(cxx_access_control_sfinae)
     67     test_is_not_constructible<A, char> ();
     68 #else
     69     test_is_constructible<A, char> ();
     70 #endif
     71     test_is_not_constructible<A, void> ();
     72     test_is_not_constructible<void> ();
     73     test_is_not_constructible<int&> ();
     74 }
     75