我有以下代码尝试在构造函数中使用 std::array 的统一初始化:
#include <iostream>
#include <array>
struct test_type_t {
test_type_t(const std::array<double, 2> & arr) : arr_{arr} {}
void print() {
std::cout << "size: " << arr_.size() << std::endl;
} // print
std::array<double, 2> arr_;
};
int main(int argc, char ** argv) {
std::array<double, 2> array{ 1.0, 2.0 };
test_type_t test{array};
test.print();
return 0;
} // main
此代码使用 g++ 和 clang++ 编译。但是,英特尔 icpc (17.0.0 20160721) 失败并显示:
icpc -g -O2 -std=c++14 -I. -c main.cc -o main.o
main.cc(9): error: no suitable conversion function from "const
std::array<double, 2UL>" to "double" exists
test_type_t(const std::array<double, 2> & arr) : arr_{arr} {}
^
我的问题是,“这是英特尔 icpc 中的错误,还是 g++ 和 clang++ 过于宽松?”
如果我在构造函数中将 'arr_{arr}' 更改为 'arr_(arr)',英特尔 icpc 会编译代码。