2

请考虑以下代码:

template <typename T>
struct foo
{
    template <typename S>
    struct bar
    {
        template <typename> friend struct bar;
    };
};

我希望所有的实例都成为any的foo<T>::bar朋友。如果不是嵌套模板,则上面的语法可以正常工作。但是当我做例如foo<T>::bar<S>Sbar

int main() 
{  
    foo<int> x;
}

MSVC8 (Visual C++ 2005) 不喜欢它:

1>.\main.cpp(11) : error C3855: 'foo<T>::bar': template parameter 'S' is incompatible with the declaration
1>        .\main.cpp(12) : see reference to class template instantiation 'foo<T>::bar<S>' being compiled
1>        .\main.cpp(14) : see reference to class template instantiation 'foo<T>' being compiled

如果我使用,编译器会给我同样的错误

template <typename> friend struct foo<T>::bar;

反而。我怎样才能达到我想要的?

编辑:我仔细检查了(这里是早上,我并没有真正醒来),这似乎是一个VC8 错误

4

1 回答 1

2

14.5.3C++ 标准部分描述了对类或类模板的友元的所有限制。您的代码有效。检查您是否已为 Visual Studio 安装了所有最新的服务包。在这里您可以找到 Visual Studio 中的相关错误。

于 2010-07-21T09:34:48.040 回答