std::optional
is in C++ 17, where it was std::experimental::optional
before.
I tried compiling a file which included <optional>
, with the command:
g++ -std=c++17 <filename>.cpp
(in the Bash terminal). I get the following error:
<filename>.cpp:5:20 fatal error: optional: No such file or directory
#include <optional>
^
compilation terminated
But I can #include <experimental/optional>
just fine.
Am I missing some header files? How can I include the optional
header?
I also can't include <any>
, <string_view>
or <variant>
, getting the same error.
You can't.
GCC 6.2's support for C++17 is experimental, which is literally why the headers are arranged like this.
If only they'd done this for std::regex
back in the day! It's a gift.
https://gcc.gnu.org/projects/cxx-status.html#cxx1z
I made a hacky workaround when faced with a situation like this:
#if defined(__GNUC__) && __GNUC__ < 7
# include <experimental/string_view>
# define string_view experimental::string_view
#else
# include <string_view>
#endif
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With