struct __do_is_destructible_impl { template<typename _Tp, typename = decltype(_Tp().~_Tp())> static bool __test(int); template<typename> static float __test(...); }; template<typename _Tp> struct __is_destructible_impl : public __do_is_destructible_impl { // Requires BINFO merging typedef decltype(__test<_Tp>(0)) type; };