'Template compilation with MSVC, GCC and Clang

I've accidentally found some weird compilation difference with this code:

namespace test
{
    template <typename T>
    class A {
        T a;
    };
}

class B : public test::A<int>
{
    friend class A<int>;
};

int main()
{ 
    return 0;
}

GCC and Clang compile this just fine, but MSVC fails with:

error C3856: 'A': symbol is not a class template
error C2628: 'A' followed by 'int' is illegal (did you forget a ';'?)
error C2059: syntax error: '>'
error C2238: unexpected token(s) preceding ';'

I'm kinda confused and wonder which compiler compiles this right?

Tested with:

MSVC: 19.30

GCC: 11.2

Clang: 13.0.0



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source