I am learning C++ using the books listed here. I wrote the following example(for purely academic reasons) that compiles with GCC but not with Clang and MSVC. Demo.
struct C {
    static bool f() noexcept(!noexcept(C::f())) 
    {
        return true;
    }
};
As we can see here the above example compiles with gcc but not with msvc and clang.
So my question is which compiler is right here(if any).
GCC compiles this.
MSVC says:
<source>(2): fatal error C1202: recursive type or function dependency context too complex
Clang says:
<source>:2:40: error: exception specification is not available until end of class definition
    static bool f() noexcept(!noexcept(C::f())) 
