Partially solves https://github.com/llvm/llvm-project/issues/59206:
We now mark trivial constructors as eligible even if there's a more constrained templated default constructor. Although technically non-conformant, this solves problems with pretty reasonable uses cases like
template<int n> struct Foo { constexpr Foo() = default; template<class... Ts> Foo(Ts... vals) requires(sizeof...(Ts) == n) {} };
where we currently consider the default constructor to be ineligible and therefor inheriting/containing classes have non trivial constructors. This is aligned with GCC: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=c75ebe76ae12ac4020f20a24f34606a594a40d15
This doesn't change __is_trivial. Although we're technically standard conformant in this regard, GCC/MSVC exhibit different behaviors that seem to make more sense. An issue has been filed to CWG and we await their response.