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_final 13 14 #include <type_traits> 15 16 #if _LIBCPP_STD_VER > 11 17 18 struct P final { }; 19 union U1 { }; 20 union U2 final { }; 21 22 template <class T> test_is_final()23void test_is_final() 24 { 25 static_assert( std::is_final<T>::value, ""); 26 static_assert( std::is_final<const T>::value, ""); 27 static_assert( std::is_final<volatile T>::value, ""); 28 static_assert( std::is_final<const volatile T>::value, ""); 29 } 30 31 template <class T> test_is_not_final()32void test_is_not_final() 33 { 34 static_assert(!std::is_final<T>::value, ""); 35 static_assert(!std::is_final<const T>::value, ""); 36 static_assert(!std::is_final<volatile T>::value, ""); 37 static_assert(!std::is_final<const volatile T>::value, ""); 38 } 39 main()40int main () 41 { 42 test_is_not_final<int>(); 43 test_is_not_final<int*>(); 44 test_is_final <P>(); 45 test_is_not_final<P*>(); 46 test_is_not_final<U1>(); 47 test_is_not_final<U1*>(); 48 test_is_final <U2>(); 49 test_is_not_final<U2*>(); 50 } 51 #else main()52int main () {} 53 #endif 54