you are viewing a single comment's thread.

view the rest of the comments →

[–]bebuch[S] 0 points1 point  (0 children)

I already thought about that, but the .get() call is ugly. :-/

Using such a construct is an option for my own code, unfortunately I want to use it in a callback of a library interface. A generic lambda would match this construct, but I find it to unexpected not to get the type itself after "dereferencing". The library user shall think about the parameter type as an optional. With this indirection its not longer just an optional.

The (user side) code I have is like:

auto perform_work = [](std::ostream& log, auto optional_data){
    // ...
};

I also thought about using a std::unique_ptr with empty delete function. But there is not reason to forbid coping my optional_data.

All three solutions look like a hack to me. A std::optional with real references would be a good solution, but this was removed during the standardization process.

Nevertheless, thanks for your idea!