Директива:
#ifndef __cplusplus
#error C++ is required
#elif __cplusplus < 201402L
#error C++14 is required
#endif
Командная строка: g++ -Wall -Wextra -std=c++14 -c -o header.o header.hpp
Моя версия g ++: g++ (tdm-1) 4.9.2
Ошибка C++14 is required
генерируется даже когда я добавил -std=c++14
Я не знаю почему.
Подскажите пожалуйста как это исправить.
Согласно руководству GCC CPP (версия 4.9.2 а также 5.1.0):
__cplusplus
Этот макрос определяется, когда используется компилятор C ++. Ты можешь использовать__cplusplus
проверить, скомпилирован ли заголовок компилятором C или C ++. Этот макрос похож на__STDC_VERSION__
в том, что расширяется до номера версии. В зависимости от выбранного языкового стандарта значение макроса199711L
в соответствии со стандартом C ++ 1998 года;201103L
согласно стандарту C ++ 2011 года; неопределенное значение, строго превышающее201103L
для экспериментальных языков, включенных-std=c++1y
а также-std=gnu++1y
,
Вы можете проверить это g++ --std=c++14
определяет __cplusplus
как:
Version __cplusplus
4.8.3 201300L
4.9.2 201300L
5.1.0 201402L
За clang++ --std=c++14
:
Version __cplusplus
3.3 201305L
3.4 201305L
3.5.x 201402L
3.6 201402L
3.7 201402L
Поэтому более надежной проверкой, вероятно, должно быть:
#ifndef __cplusplus
# error C++ is required
#elif __cplusplus <= 201103L
# error C++14 is required
#endif
Как указано в комментарии, это может означать частичную поддержку C ++ 14.
Для проверки конкретной функции вы также можете попробовать Boost Config (особенно Макросы, описывающие функции C ++ 14, не поддерживаются).