No so long ago I discovered
<optional> is a part of the C++17 standard. This header library is already shipped with GCC 7.0. Unfortunately, mingw-w64 (i.e. for Windows 🙂 ) currently supports GCC 6.3.
Lucky me, I found out that GCC 6.3 comes with the
<experimental/optional> header and the
std::experimental::optional wrapper. It makes some problems with naming because with the older version I have to add this “experimental” namespace and code is no longer portable.
After some tinkering I found
__has_include directive coming with C++17 as well. You just pass header name you would like to include and it returns boolean, what makes it perfect for
I had to make an ugly hack in here and put
optional in the
std namespace. The good thing is, the code works with both headers and fails to compile of neither is provided.
$ clang++ -std=c++1z main.cpp -o main.exe $ ./main no value
<optional> support comes to MinGW-w64, I will have only a few includes to clean up. But the code will work even without it.