Intel C++编译器(版本16.0.3.207Build 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++
发布于 2017-01-05 22:28:55
我认为标准中适当的措辞如下(n4296,12.9继承构造函数):
..。 构造函数或构造函数模板的构造函数特征()为 (2.1) -模板参数列表(14.1),如果有的话, (2.2) -参数-类型列表(8.3.5) (2.3) -缺少或存在显式 (12.3.1)。 对于候选的一组继承构造函数中的每个非模板构造函数(不包括没有参数的构造函数或具有单个参数的复制/移动构造函数),构造函数将使用隐式声明相同的构造函数特征(),除非在出现using-声明的完整类中存在具有相同签名的用户声明构造函数,或者构造函数将是该类的默认、复制或移动构造函数。 ..。
所以很可能是英特尔C++编译器中的一个bug。
https://stackoverflow.com/questions/41495401
复制相似问题