【发布时间】:2020-08-13 14:49:48
【问题描述】:
在GodBolt.org 上测试时,此代码在 MSVC 上编译,但在 GCC 上不编译
Baz 类是在匿名命名空间中声明的,这使 GCC 认为它与我在下面定义的类不同,但 MSVC 似乎将它们连接起来。
namespace { class Baz; }
class Foo { protected: int x; };
class Bar : public Foo { friend class Baz; };
namespace {
class Baz { void f() { Bar b; b.x = 42; } };
}
根据标准什么是正确的?
【问题讨论】:
-
@Downvoters,我认为这是一个好问题时错过了什么?
-
@Jeffrey 我现在让 Q 中的神螺栓链接包含代码。从一开始就应该这样做。
-
你可以摆脱继承而只拥有
class Bar { friend class Baz; protected: int x; };。我仍然可以用它来重现它 - 用 msvc 和 clang 但不是 gcc 编译。 -
This question 可能是相关的。
-
嗯,clang 编译得很好,所以我认为这是 gcc 的问题。看起来像Bug 71882
标签: c++ language-lawyer