C++ GNU, как проверить, когда-std=c ++ 0x в действительности?

Мой системный компилятор (gcc42) хорошо работает с функциями TR1, которые я хочу, но пытающийся поддерживать более новые версии компилятора кроме систем, пробуя к доступу к заголовкам TR1 #error, требующий-std=c ++ 0x опция из-за того, как это взаимодействует через интерфейс с библиотекой или некоторой выпивкой концентратора как этот.

/usr/local/lib/gcc45/include/c++/bits/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

Необходимость предоставить дополнительный переключатель не является никакой проблемой, для поддержки GCC 4.4 и 4.5 под этой системой (FreeBSD), но очевидно это изменяет изображение!

Используя мой системный компилятор (g ++ 4,2 диалекта по умолчанию):

#include <tr1/foo>
using std::tr1::foo;

Используя более новый (4.5) версии компилятора с-std=c ++ 0x:

#include <foo>
using std::foo;

Там так или иначе использует пред процессор, который я могу сказать, работает ли g ++ с C++ 0x, функции включили?

Что-то вроде этого - то, что я ищу:

#ifdef __CXX0X_MODE__
#endif

но я ничего не нашел в руководстве или от сети.

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

37
задан TerryP 2 June 2010 в 13:59
поделиться

2 ответа

Если вы компилируете с -std=c++0x, то __GXX_EXPERIMENTAL_CXX0X__ будет определено.

36
ответ дан 27 November 2019 в 04:04
поделиться

Кажется, что в gcc 4.4.4 есть только один предопределенный макрос, намекающий на то, что действует -std = c ++ 0x:

#define __GXX_EXPERIMENTAL_CXX0X__ 1

У меня нет доступа к gcc 4.5 .0, но вы можете проверить это самостоятельно:

[16:13:41 0 ~] $ g++ -E -dM -std=c++0x -x c++ /dev/null >b
[16:13:44 0 ~] $ g++ -E -dM -std=c++98 -x c++ /dev/null >a
[16:13:50 0 ~] $ diff -u a b
--- a   2010-06-02 16:13:50.200787591 +0200
+++ b   2010-06-02 16:13:44.456912378 +0200
@@ -20,6 +20,7 @@
 #define __linux 1
 #define __DEC32_EPSILON__ 1E-6DF
 #define __unix 1
+#define __GXX_EXPERIMENTAL_CXX0X__ 1
 #define __LDBL_MAX_EXP__ 16384
 #define __linux__ 1
 #define __SCHAR_MAX__ 127

Для однострочной команды do,

g++ -E -dM -std=c++98 -x c++ /dev/null > std1 && g++ -E -dM -std=c++0x -x c++ /dev/null > std2 && diff -u std1 std2 | grep '[+|-]^*#define' && rm std1 std2

дает вам что-то вроде:

+#define __GXX_EXPERIMENTAL_CXX0X__ 1
82
ответ дан 27 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: