Search code examples
c++c++11c++17nullptrstdoptional

Using std::optional in a C++11 context


I'm writing a small C++11 library in which I believe std::optional would be a nice addition in some functions which can return nullptr. However, std::optional is a C++17 feature. Since being C++11 is a requirement, I'm looking for ways to use std::optional while keeping compatibility.

I found that feature macros can be tested. I suppose I could use it to detect whether std::optional is available... but what's the best approach when it isn't?

Should I provide my own std::optional implementation?

Return nullptr when std::optional isn't available? (Likely to mess my code.)

Or give up on the idea and keep returning nullptr only?


Solution

  • There is no standard way of using std::optional in C++11. You can either depend on C++17, or you cannot use std::optional.

    Should I provide my own std::optional implementation?

    You can write your own optional implementation, but you cannot call it std::optional. Alternatively, you can use a pre-existing implementation such as the one in Boost.

    All that said, if you're returning a pointer anyway, then there is probably not much point in using optional since pointers already have a representation for "empty" value: the null pointer. If however you need to distinguish null from empty, then optional may be useful.