Jun*_*eon 26 c++ using-declaration private-inheritance name-lookup c++11
请参阅以下代码
struct A { using type = int; };
struct B : private A {};
struct C : B { using base_type = A; };
Run Code Online (Sandbox Code Playgroud)
所有的gcc 6.1,clang 3.8和msvc 2015更新3都拒绝编译它,因为A
它不是一个可访问的名称,C
因为它A
是一个私有基础B
.似乎gcc认为A
是using base_type = A
指默认构造函数A
.msvc和clang似乎没有.
也许编译错误是由于继承触发的名称注入(因为修改using base_type = A
为using base_type = ::A
使所有编译器工作正常),但我想知道这个奇怪的错误是否是标准所说的.
更具体地说,
A::type
,A
只是一个类名(虽然gcc误解为一个函数名),它不是引入C
内部 A
也不引入B
.为什么这个名字被认为是私人的B
? 归档时间: |
|
查看次数: |
1200 次 |
最近记录: |