启用 C++14 英特尔编译器

Enable C++14 Intel Compiler

本文关键字:编译器 英特尔 C++14 启用      更新时间:2023-10-16

我正在使用英特尔C++编译器版本 15.0.0.108 Build 20140726,但我无法使用某些 C++14 功能,例如"decltype(auto),普通函数的返回类型推断"在此处声明支持

如果我做这样的事情:

std::for_each(vector.begin(), vector.end(), [] (auto value) {});

然后我得到这个错误:

错误:此处不允许使用"自动"

我正在使用这个进行编译:

icl /FA /EHs program.cpp

您尝试使用的功能称为来自 N3649 的通用(多态)lambda 表达式,您链接的表显示尚未添加支持。但是,您认为正在使用的功能,N3638 中的"decltype(auto),正常函数的返回类型推导"确实有支持。

泛型 lambda 如下所示:

[](auto a) { return a; }

正常函数的返回类型推导如下所示:

auto func() { return 42; } // deduced to be int

n3638 中的以下示例中描述了decltype(auto)的语义:

如果占位符是 decltype(auto) 类型说明符,则声明的 变量的类型或函数的返回类型应为 仅占位符。为变量或返回类型推导的类型为 按照 7.1.6.2 中所述确定,就好像初始值设定项是 decltype 的操作数。[ 示例:

int i;
int&& f();
auto           x3a = i;        // decltype(x3a) is int
decltype(auto) x3d = i;        // decltype(x3d) is int
auto           x4a = (i);      // decltype(x4a) is int
decltype(auto) x4d = (i);      // decltype(x4d) is int&
auto           x5a = f();      // decltype(x5a) is int
decltype(auto) x5d = f();      // decltype(x5d) is int&&
auto           x6a = { 1, 2 }; // decltype(x6a) is std::initializer_list<int>
decltype(auto) x6d = { 1, 2 }; // error, { 1, 2 } is not an expression
auto          *x7a = &i;       // decltype(x7a) is int*
decltype(auto)*x7d = &i;       // error, declared type is not plain decltype(auto)

— 结束示例 ]