2016-02-23 2 views
1

Это не может компилироваться GCC 4.6:Тест на C++ 11 в GCC 4.6

#if __cplusplus >= 201103L 
#include <ratio> 
#endif 

__cplusplus должен быть установлен в "1" в GCC 4.6 в соответствии с этой ошибкой: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=1773

Как должен ли я тестировать поддержку C++ 11 в GCC 4.6?

EDIT: Я хочу использовать коэффициент усиления при построении с помощью GCC 4.6 и std с GCC 4.8 и -std = C++ 11. Остальная часть кода готова к этому, это только то, что не удается скомпилировать.

+0

Это лучше проверить известный к трудовой деятельности компиляторов и версий. Таким образом, вы можете использовать '__GNUC__' и' __GNUC_MINOR__'. –

+0

'__GXX_EXPERIMENTAL_CXX0X__' может быть? Но на данный момент я просто считаю, что gcc-4.6 (и старше) не поддерживает C++ 11, гораздо проще и не исключает, что многие пользователи. –

ответ

0

Поскольку даже компиляторы, теоретически поддерживающие ту или иную стандартную версию, могут иметь ошибки, лучше полагаться на конкретные версии, которые, как известно, дают достоверные результаты.

В G ++, вы можете сделать:

#if __GNUC__ == 4 && __GNUC_MINOR__ >= 9 
    // use C++11 features 
#else if __GNUC__ == 5 
    // use C++11 features 
#else 
    // maybe don't use some features 
#endif 
+1

Не было бы лучше для долгосрочного использования '#else if __GNUC__> 4' (или'> = 5')? Когда-нибудь будет GCC 6.x, и было бы неприятно, если бы код был нарушен из-за небрежности. –

+0

@JonathanLeffler Да; моя главная задача заключалась в том, чтобы показать, как принимать во внимание различные версии и, в частности, не делать что-то вроде (major> = 4 && minor> = 9) - то есть, если major == 5 и minor == 0. –

0

Просто попробуйте скомпилировать эту программу:

int main() 
{ 
    auto i = 0; 
    return 1; 
} 

с помощью команды g++ -std=c++11 -c filename.cpp в командной строке. auto - это функция C++ 11, поэтому, если она компилируется без ошибок, это означает, что ваш компилятор поддерживает C++ 11.

Но в целом, для gcc, до версии 5.1, поддержка C++ 11 была экспериментальной. Таким образом, до версии 5.1, что gcc поддерживает все, что предлагает C++ 11.

+1

«это означает, что ваш компилятор поддерживает C++ 11». Это означает, что ваш компилятор поддерживает эту уникальную особенность C++ 11. Он ничего не говорит о каких-либо других возможностях C++ 11. Если вы попытаетесь скомпилировать тестовые программы, чтобы убедиться, что компилятор принимает определенную функцию, лучше проверить именно ту функцию, которая вам нужна. В этом случае тестовая программа может быть '#include '/'int main() {}'. – hvd

+0

@hvd Вы правы, структура моего предложения вводит в заблуждение. Изменено. –

Смежные вопросы