Endilll wrote: > @Endilll "the program is ill-formed if overload resolution fails" means that > there must be exactly one valid prospective destructor. > > So this is perfectly fine > > ```c++ > template <typename T> > struct S { > ~S() = default; > ~S() requires false; > }; > S<int> s; > ```
Sure, but the constraint here doesn't really decide whether `S<T>` is an implicit-lifetime class or not. Rather, it decides whether `S<T>` is well-formed. I was reading that paragraph from the point of a different (hypothetical) example: ```cpp template <bool B> struct S { ~S() requires B {}; }; static_assert(!__builtin_is_implicit_lifetime(S<true>)); static_assert(__builtin_is_implicit_lifetime(S<false>)); ``` What I actually meant is that such an example where a dependent constraint on destructor decides whether a class is implicit-lifetime doesn't seem possible (or it would be testing something else, like in your example). Sorry for the confusion. https://github.com/llvm/llvm-project/pull/101807 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits