Включить C ++ 14 Intel Compiler

0

Я использую Intel C++ Compiler версии 15.0.0.108 сборки 20140726, и я не могу использовать некоторые C++ 14 функций, таких как "decltype (авто), тип возвращаемого значения вычет для нормальных функций" объявил поддержку здесь

Если я сделаю что-то вроде:

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

Затем я получил эту ошибку:

Ошибка: "авто" здесь не разрешено

Я компилирую, используя это:

icl /FA /EHs program.cpp
  • 0
    Нет варианта для языкового стандарта?
  • 0
    Я прочитал всю справку из командной строки и попытался найти в Google и ничего. /Qstd=<std> из командной строки имеет опцию /Qstd=<std> но только с c++11 или c++0x , я пробовал c++14 и c++1y и не работает. Он говорит: неверный аргумент для опции '/ Qstd'.
Показать ещё 3 комментария
Теги:
c++14
intel

1 ответ

2
Лучший ответ

Функция, которую вы пытаетесь использовать, называется общим (полиморфным) лямбда-выражением от N3649, а связанная с ней таблица показывает, что поддержка еще не добавлена. Тем не менее, функция (ы), которые, по вашему мнению, вы используете, "decltype (auto), вывод типа возврата для нормальных функций" из N3638 имеют поддержку.

Общая лямбда выглядит так:

[](auto a) { return a; }

Вывод типа возвращаемого значения для обычных функций выглядит так:

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

Семантика для decltype(auto) описана в следующем примере из n3638:

Если заполнитель является спецификатором типа 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)

- конец примера]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню