std::необязательно не компилируется

#c #std #stdoptional

#c #std #стандартный вариант

Вопрос:

Этот код не компилируется с помощью команды g -std=c 17 main.cpp

 #include <iostream>
#include <experimental/optional>

int main()
{
    std::optional<int> x;
    std::cout << "Hello World";
    return 0;
}
 

Ошибки заключаются в следующем:

  1. ошибка: ’optional’ не является членом ‘std’
  2. ошибка: ожидаемое первичное выражение перед ‘int’

Есть ли способ заставить этот код скомпилироваться?

Ответ №1:

<experimental/optional> Заголовок не определяет std::optional , а скорее std::experimental::optional . Чтобы получить std::optional , который является (неэкспериментальной) частью стандарта C 17, вы должны просто #include <optional> .

Попробуйте godbolt.