Evg*_*Evg 10 c++ explicit-constructor icc using-declaration c++11
当使用using继承基类的构造函数时,英特尔C++编译器(版本16.0.3.207 Build 20160415)似乎删除了显式说明符.这是一个错误吗?
struct B
{
    explicit B(int) { }
};
struct D : B
{
    using B::B;
};
B b = 1; // Not OK, fine
D d = 1; // Not OK with Microsoft C++ and GCC, but OK with Intel C++
我认为标准中的适当措辞如下(n4296,12.9 继承构造函数):
...
构造函数或构造函数模板的构造函数特征是
(2.1) - 模板参数列表(14.1),如果有的话,
(2.2) - 参数类型列表(8.3.5),和
(2.3) - 缺席或存在明确(12.3.1).
对于除了没有参数的构造函数或具有单个参数的复制/移动构造函数之外的候选继承构造函数集中的每个非模板构造函数,构造函数隐式声明具有相同的构造函数特征, 除非存在用户声明的构造函数完整类中的相同签名,其中出现using声明或构造函数将是该类的默认,复制或移动构造函数.
...
所以很可能是英特尔C++编译器中的一个错误.
| 归档时间: | 
 | 
| 查看次数: | 247 次 | 
| 最近记录: |