使用声明能否引入一个间接基类的公有成员,而该成员在直接基类中变成私有?

编程语言 2026-07-09

请考虑以下内容:

struct A {
    int member;
};

struct B : public A {
private:
    using A::member;
};

struct C : public B {
    using A::member; // #1
};

Clang、EDG和 MSVC接受这段代码,而GCC拒绝(演示)。如果把第 #1 行改为 using B::member;,所有编译器都会拒绝(演示)。

using声明 #1 是否有效?

解决方案

这是一个久经验证且至今尚未解决的GCC错误。GCC错误地 拒绝 你的第一段代码。以下是原始的错误报告:

将公共基类成员函数私有化会阻止派生类使用基类成员函数

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章