Подтвердить что ты не робот

Что такое #defined, если компилятор совместим с Cpp0x?

Есть ли официальный или неофициальный номер #defines, когда компилятор совместим с Cpp0x? Еще лучше, для конкретной функциональности Cpp0x (~ # cpp0xlambda, # cpp0xrvalue и т.д.)?

(ничего не найдено об этом в сети)

4b9b3361

Ответ 1

Bjarne С++ 0x FAQ говорит:

__cplusplus

В С++ 0x макрос __cplusplus будет установлен в значение, которое отличается от (больше) текущего 199711L.

Ответ 2

Для С++ 03 согласно 16.8/1 (заданные имена макросов):

Имя __cplusplus определяется значением 199711L при компиляции единицы перевода С++.

Для С++ 0x черновик n2857 в соответствии с 16.8/1 (заданные имена макросов):

При компиляции единицы перевода С++ имя __cplusplus определяется значением [tbd].

Ответ 3

Официальная спецификация включает значение для макроса препроцессора __cplusplus, но, как указывали другие, это говорит о том, что все в спецификации реализовано. Более того, никакой текущий компилятор (который я знаю) не устанавливает соответствующее значение. Спектры хорошо и хорошо, но полностью нереализованные биты любой спецификации следует считать предварительными; пересечение спецификации и широкой поддержки является реальным "стандартом".

Связанный вопрос: "Как я могу определить, включена ли хотя бы поддержка С++ 0x?", например. с помощью переключателя компилятора -std=c++0x. Ответ на этот вопрос является специфичным для компилятора и может быть изменен, но оба GCC 4.6 и Clang 2.1 устанавливают макрос препроцессора __GXX_EXPERIMENTAL_CXX0X__ (и дают ему значение 1), когда включена их частичная поддержка С++ 0x.