【发布时间】:2017-05-20 14:35:53
【问题描述】:
英特尔 C++ 编译器(版本 16.0.3.207 Build 20160415)似乎在使用 using 继承基类的构造函数时删除了 explicit 说明符。这是一个错误吗?
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++
【问题讨论】:
-
这当然应该是一个错误。继承的构造函数只是使用“using”指令公开,因此它应该与基类中的调用相同。
-
我发现的唯一一件事,除了显式构造函数的定义是:“如果使用声明命名构造函数(3.4.3.1),它会在类中隐式声明一组构造函数使用声明出现(12.9)“就是这样。我没有看到任何明确的(双关语不是有意的)表明一种或另一种行为是正确的。
标签: c++ c++11 using-declaration icc explicit-constructor