[...] 命名构造函数的 using 声明不会创建同义词;相反,如果附加构造函数在用于构造相应基类的对象时可访问,则它们是可访问的,并且使用声明的可访问性被忽略。[...]
因此,以下代码无法编译:
class B { protected: B(int) { } };
class D: B { using B::B; };
int main () { D d{0}; }
它返回一个与所有主要编译器或多或少相同的错误:
在这里声明受保护
另一方面,以下代码编译:
class B { protected: B() { } };
class D: B { using B::B; };
int main () { D d{}; }
它不应该因为与前面示例中导致错误相同的原因而无法编译吗?
它允许它编译什么?