【发布时间】:2015-07-30 15:59:16
【问题描述】:
我在 Visual Studio 上测试了以下代码,它编译并打印“A(double)”。
#include <iostream>
#include <initializer_list>
struct A {
A(std::initializer_list<int>) { puts("initializer_list<int>"); } // (1)
A(std::initializer_list<float>) { puts("initializer_list<float>"); } // (2)
A(double) { puts("A(double)"); } // (3)
};
int main() {
A var{ 1.1 };
}
但是,IntelliSense 和http://ideone.com/ZS1Mcm 不同意,说构造函数“A::A”的多个实例与参数列表匹配(意味着两个初始化列表构造函数)。请注意,如果 (1) 或 (2) 被删除,代码将不再编译,因为“从 'double' 到 'float' 的转换需要缩小转换”。
这是一个错误吗?这种行为感觉不一致,但我在 VS13 和 VS15 中看到了相同的行为,所以也许还有更多?
【问题讨论】:
标签: c++ visual-studio c++11