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

Reply via email to