gpt4 book ai didi

c++ - 为什么 Visual C++ 无法编译继承自私有(private)嵌套类的友元模板?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:24 26 4
gpt4 key购买 nike

考虑以下代码:

class A {
class B {};

template <typename T>
friend class C;
};

template <typename T>
class C : A::B {};

int main() { C<int> c; }

它可以用 GCC 和 Clang 编译,但是 Visual C++ 2010 会报错:

test.cc(11) : error C2248: 'A::B' : cannot access private class declared in class 'A'

这是 Visual C++ 中的错误还是我遗漏了什么?

最佳答案

1998 年标准和 2011 年标准都包含基本相同的代码作为示例,分别在 14.5.3 #4 和 14.5.4 #3 中。

class X {
template<class T> friend struct A;
class Y { };
};
template<class T> struct A { X::Y ab; }; // OK
template<class T> struct A<T*> { X::Y ab; }; // OK

显然这是一个错误。

关于c++ - 为什么 Visual C++ 无法编译继承自私有(private)嵌套类的友元模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843803/

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