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