gpt4 book ai didi

c++ - 模板 friend 和嵌套类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:19 26 4
gpt4 key购买 nike

请考虑以下代码:

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

我想要 foo<T>::bar 的所有实例化成为foo<T>::bar<S>的 friend 对于任何 S .如果bar不是嵌套模板,上面的语法工作得很好。但是当我这样做时

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 bug :

最佳答案

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

关于c++ - 模板 friend 和嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com