Per CWG 1496 and C++17, a trivial class "...has one or more default constructors, all of which are either trivial or deleted and at least one of which is not deleted." Nevertheless, clang trunk diagnoses this well-formed TU (https://godbolt.org/z/a5Aflw): template<class T> constexpr bool is_trivial = __is_trivially_constructible(T) && __is_trivially_copyable(T); struct NonTrivial { NonTrivial() = delete; }; static_assert(!is_trivial<NonTrivial>); // succeeds static_assert(!__is_trivial(NonTrivial)); // fails (and should not) as ill-formed since __is_trivial(NonTrivial) is incorrectly true.