Как проверить поддержку C ++ 20?Какое значение __cplusplus для C ++ 20? - PullRequest
0 голосов
/ 30 ноября 2018

Относительно вопросов Как проверить поддержку C ++ 11? и Какое значение __cplusplus для C ++ 17?

Как можноЯ спрашиваю, может ли компилятор обрабатывать / настроен на использование C ++ 20?Я знаю, что в принципе можно запросить версию C ++:

#if __cplusplus > ???
  // C++20 code here
#endif

Каким должно быть ??? для C ++ 20?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Пока неизвестной версии __cplusplus, потому что C ++ 20 все еще находится в разработкеЕсть только черновики для C ++ 20.

Последний набросок N4788 по-прежнему содержит:

__cplusplus

Литерал целого числа201703L.[Примечание: предполагается, что будущие версии этого международного стандарта заменят значение этого макроса на большее значение.- конец примечания]

Что касается проверки, я бы использовал ответ @gsamaras.

0 голосов
/ 30 ноября 2018

Новое значение будет доступно в некоторый момент в [cpp.predefined] p1.1 :

_­_­cplusplus

Целочисленный литерал 201703L.[Примечание: предполагается, что будущие версии этого международного стандарта заменят значение этого макроса на большее значение.- примечание к концу]

Текущие значения, используемые в основных компиляторах, по состоянию на 2018-11-30:

Поскольку все они уже выше, чем C ++ 17 201703L, вы уже можете использовать:

#if __cplusplus > 201703L
    // C++20 code
#endif
0 голосов
/ 30 ноября 2018

Это слишком рано.

Пока стандарт не заменит его, используйте:

#if __cplusplus > 201703L
  // C++20 code
#endif

, так как предопределенный макрос в C ++ 20 будет больше, чем макросC ++ 17.

Как отмечается в ответе @ SombreroChicken, [cpp.predefined] (1.1) указывает (выделено мной):

__cplusplus

Целочисленный литерал 201703L.[Примечание: предполагается , что будущие версии этого международного стандарта заменят значение этого макроса на большее значение.]


Используемые макросы по состоянию на ноябрь 2018 года:


PS:Если вас интересуют конкретные функции, то [cpp.predefined] (1.8) определяет соответствующие макросы, которые вы можете использовать.Обратите внимание, что они могут измениться в будущем.

...