简体   繁体   中英

How to include C++ 17 headers with g++ 6.2.0 with -std=c++17 (optional, any, string_view, variant)

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM