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

--- Comment #2 from Michele Caini <michele.caini at gmail dot com> ---
The fact that it compiles it is misleading at least.
Consider the following code:

    #include<type_traits>

    template<typename...>
    using void_t = void;

    template<typename, typename = void_t<>>
    struct has_foo: std::false_type { };

    template<typename T>
    struct has_foo<T, decltype(T::foo)>: std::true_type { };

    struct S: has_foo<S> {
        static constexpr int foo = 42;
    };

    int main() {
        // S does not have foo...
        static_assert(not S::value, "!");
        // ... really?
        static_assert(S::foo == 42, "!");
    }

The result is unexpected indeed.
So subtle an issue to find, that one.

Reply via email to