Что такое #defined, если компилятор совместим с Cpp0x?
Есть ли официальный или неофициальный номер #defines, когда компилятор совместим с Cpp0x?
Еще лучше, для конкретной функциональности Cpp0x (~ # cpp0xlambda, # cpp0xrvalue и т.д.)?
В С++ 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.