https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127321

--- Comment #2 from Ivan Lazaric <ivan.lazaric.gcc at gmail dot com> ---
Simplified example, same behaviour

```cpp
template<int n>
struct registry {
    friend consteval auto injected(registry);
};

template<int n, typename T>
struct inject {
    friend consteval auto injected(registry<n>) { return T{}; }
};

#pragma GCC diagnostic push
#pragma GCC diagnostic warning "-Wsfinae-incomplete=0"
#pragma GCC diagnostic pop

template<int n, typename = decltype([]{})>
consteval int query() {
    if constexpr (requires (registry<n> r) { injected(r); }) {
        return sizeof(injected(registry<n>{}));
    } else {
        return 0;
    }
}

static_assert(query<0>() == 0);

inject<0, int> i;

static_assert(query<0>() == 4);
```

https://godbolt.org/z/MG4xxW7bh
https://godbolt.org/z/dEEsEes3j

Reply via email to