//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// type_traits
// has_trivial_destructor
#include<type_traits>template<classT>voidtest_has_trivial_destructor(){static_assert(std::has_trivial_destructor<T>::value,"");static_assert(std::has_trivial_destructor<constT>::value,"");static_assert(std::has_trivial_destructor<volatileT>::value,"");static_assert(std::has_trivial_destructor<constvolatileT>::value,"");}template<classT>voidtest_has_not_trivial_destructor(){static_assert(!std::has_trivial_destructor<T>::value,"");static_assert(!std::has_trivial_destructor<constT>::value,"");static_assert(!std::has_trivial_destructor<volatileT>::value,"");static_assert(!std::has_trivial_destructor<constvolatileT>::value,"");}classEmpty{};classNotEmpty{virtual~NotEmpty();};unionUnion{};structbit_zero{int:0;};classAbstract{virtual~Abstract()=0;};structA{~A();};intmain(){test_has_not_trivial_destructor<void>();test_has_not_trivial_destructor<A>();test_has_not_trivial_destructor<Abstract>();test_has_not_trivial_destructor<NotEmpty>();test_has_trivial_destructor<int&>();test_has_trivial_destructor<Union>();test_has_trivial_destructor<Empty>();test_has_trivial_destructor<int>();test_has_trivial_destructor<double>();test_has_trivial_destructor<int*>();test_has_trivial_destructor<constint*>();test_has_trivial_destructor<char[3]>();test_has_trivial_destructor<char[3]>();test_has_trivial_destructor<bit_zero>();}