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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits