【发布时间】:2019-04-16 15:29:07
【问题描述】:
我期待编译器从另一个类型的临时变量初始化 c++ 类型时抛出一个错误。
template <bool>
struct A{
A(...);
};
template <> struct A<false>{
};
class B{
};
class C{
int i;
};
int main()
{
//A a;
B b;
C c(B());
A<false> aa(B());
cout << "Hello World!!" << endl;
}
在这里,我为 bool 类型的非类型参数和值为 false 的非类型参数专门设置了 A 类,因此它只有编译器生成的标准构造函数,它不应该接受任何其他类型作为初始化参数。
为简化起见,我使用了 C 类,结果相同(编译时没有错误)。
但如果我这样做 C c(b); 它会导致我期望的错误:错误:没有匹配函数调用'C::C(B&)'
【问题讨论】:
-
编译器考虑函数已声明,但未定义