显式特化成员类的成员类的外部定义

outside definition of member class of an explicitly specialized member class

本文关键字:成员类 定义 外部      更新时间:2023-10-16

这个例子来自N4527 14.7.3[temp.expl]。Spec]/5,有一点改动。

template<class T>
struct A {
    struct B{};
};
template<> struct A<char>::B{
    void f();
    struct C;
    struct D{}; // ok
};
void A<char>::B::f(){}// ok in gcc5.1.0 and clang3.6.0
struct A<char>::B::C{};// error in gcc5.1.0, ok in clang3.6.0
int main()
{
    return 0;
}

我认为这是一个bug,我已经报告了。https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67402