Статус реализации std :: необязательный в g ++ / libstdc ++?

Поскольку я работаю над библиотекой C ++, которая будет выпущена в открытом доступе в 2014 году, в настоящее время у меня есть выбор дизайна. Одним из очень полезных инструментов, который будет выпущен с C ++ 14, является std::optional, Хотелось бы узнать с какой версией g++/libstdc++ Я могу ожидать, чтобы это с помощью -std=c++1y,

15

Решение

Обновление (октябрь 2016 г.): std::optional не был в окончательном стандарте C ++ 14, поэтому он никогда не доступен с -std=c++1y, Вместо этого GCC 4.9 включает std::experimental::optional который доступен с -std=c++1y,

GCC 7 будет включать std::optional с -std=c++1z то есть C ++ 17.

Оригинальный ответ (июнь 2013 г.):

В настоящее время это не реализовано, смотрите http://gcc.gnu.org/ml/libstdc++/2013-06/msg00032.html за состояние функций C ++ 14 в магистрали GCC.

Когда он будет реализован, зависит от того, когда кто-то добровольно выполнит работу, поэтому невозможно предсказать.

я мог бы ожидать это будет сделано для GCC 4.9, который должен быть выпущен незадолго до стандарта C ++ 14, но никаких гарантий нет. Однако вряд ли он будет добавлен в GCC 4.8, так как он уже выпущен и в отличие от GCC 4.9 (то есть магистрали подрывной деятельности GCC) __cplusplus макрос имеет то же значение для -std=c++11 а также -std=c++1y поэтому для GCC 4.8 нет возможности выборочно включить функции для -std=c++1y только.

16

Другие решения

Согласно их Страница состояния libstdc ++ GCC 7.1 — первая версия std::optional не будучи скрытым в std::experimental и это поддерживает __has_include(<optional>) функциональный тест. Функциональный тест __cpp_lib_optional >= 201603 был добавлен в GCC 7.3.

2