При написании кросс-платформенного и кросс-компиляторного кода часто приходится ветвить код с учётом версии стандарта C++, которую может использовать тот или иной компилятор.
Для такой проверки существует макрос __cplusplus. Чтобы узнать поддерживаемую компилятором версию стандарта языка, нужно проверить значение (или, как говорят, "ценность") этого макроса.
Вот так мы убедимся, поддерживает ли наш компилятор стандарт C++11 или выше:
#if __cplusplus >= 201103L
std::cout << "It's C++11 or higher" << std::endl;
#else
std::cout << "It's C++" << std::endl;
#endif
Если нужно учитывать несколько стандартов (например C++11, C++14 и C++17), то код может выглядеть так:
#if __cplusplus == 201703L
std::cout << "It's C++17" << std::endl;
#elif __cplusplus == 201402L
std::cout << "It's C++14" << std::endl;
#elif __cplusplus == 201103L
std::cout << "It's C++11" << std::endl;
#else
std::cout << "It's C++" << std::endl;
#endif