The existing implementation is the correct one for C++11, where `is_destructible<T>` is defined as: > For a complete type `T` and given `template <class U> struct test { U u; };`, `test<T>::˜test()` is not deleted. http://reviews.llvm.org/D4306