Проверка версии стандарта C++

При написании кросс-платформенного и кросс-компиляторного кода часто приходится ветвить код с учётом версии стандарта 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