luabind-deboostified
luabind-deboostified copied to clipboard
Support object_cast_nothrow with std::optional
Now that C++17 nearly finished, we could use std::opational for luabind::object_cast_nothrow
I don't feel comfortable adopting the standard before it is signed, although I was really expecting optional myself eagerly :(
You can use macros to detect c++ standard and disable features aren't supported for older/newer standards
__cplusplus
This macro is defined when the C++ compiler is in use. You can use __cplusplus to test whether a header is compiled by a C compiler or a C++ compiler. This macro is similar to __STDC_VERSION__, in that it expands to a version number. Depending on the language standard selected, the value of the macro is 199711L for the 1998 C++ standard, 201103L for the 2011 C++ standard, 201402L for the 2014 C++ standard, or an unspecified value strictly larger than 201402L for the experimental languages enabled by -std=c++1z and -std=gnu++1z.
You should already be able to use it with std::optional like this:
auto thisIsAnOptional = object_cast_nothrow<YourCppType>(yourLuaValue, std::optional<YourCppType>());
At least that was my plan when changing it to the way it is now. If that doesn't work, we should fix it.