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 // is_nothrow_assignable
     13 
     14 #include <type_traits>
     15 
     16 template <class T, class U>
     17 void test_is_nothrow_assignable()
     18 {
     19     static_assert(( std::is_nothrow_assignable<T, U>::value), "");
     20 }
     21 
     22 template <class T, class U>
     23 void test_is_not_nothrow_assignable()
     24 {
     25     static_assert((!std::is_nothrow_assignable<T, U>::value), "");
     26 }
     27 
     28 struct A
     29 {
     30 };
     31 
     32 struct B
     33 {
     34     void operator=(A);
     35 };
     36 
     37 struct C
     38 {
     39     void operator=(C&);  // not const
     40 };
     41 
     42 int main()
     43 {
     44     test_is_nothrow_assignable<int&, int&> ();
     45     test_is_nothrow_assignable<int&, int> ();
     46 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
     47     test_is_nothrow_assignable<int&, double> ();
     48 #endif
     49 
     50     test_is_not_nothrow_assignable<int, int&> ();
     51     test_is_not_nothrow_assignable<int, int> ();
     52     test_is_not_nothrow_assignable<B, A> ();
     53     test_is_not_nothrow_assignable<A, B> ();
     54     test_is_not_nothrow_assignable<C, C&> ();
     55 }
     56