1

我有以下代码尝试在构造函数中使用 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 会编译代码。

4

0 回答 0