Как Вы определяете, какая версия стандарта C++ реализована Вашим компилятором? Насколько я знаю, ниже стандарты, которые я знал:
Насколько мне известно, универсального способа сделать это не существует. Если вы посмотрите на заголовки кроссплатформенных / нескольких поддерживающих компиляторов библиотек, вы всегда найдете множество определений, которые используют специфические конструкции компилятора для определения таких вещей:
/*Define Microsoft Visual C++ .NET (32-bit) compiler */
#if (defined(_M_IX86) && defined(_MSC_VER) && (_MSC_VER >= 1300)
...
#endif
/*Define Borland 5.0 C++ (16-bit) compiler */
#if defined(__BORLANDC__) && !defined(__WIN32__)
...
#endif
Вам, вероятно, придется делать такие определения для всех компиляторов, которые вы используете.
В зависимости от того, чего вы хотите достичь, вам может помочь Boost.Config . Он не обеспечивает обнаружение стандартной версии, но предоставляет макросы, которые позволяют вам проверять поддержку определенного языка / функций компилятора.
__ cplusplus
В C ++ 0x макросу __cplusplus будет присвоено значение, которое отличается (больше) от текущего 199711L.
После быстрого поиска в Google :
__ STDC __
и __ STDC_VERSION __
, см. здесь