Boost logo

Boost :

Subject: [boost] [optional] using name boost::in_place -- need your opinion/advice
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2016-05-30 03:47:14

Hi Everyone,
I have stumbled upon a problem that I do not know how to address. I would
like to seek an advice from the people in this list.

I am trying to make boost::optional resemble std::optional (where it is
reasonably easy to achieve). std::optional has this nice and useful
"placement" constructor:

  std::optional<std::mutex> m {std::in_place};

std::in_place is a tag type, that instructs std::optional to create an
object using placement-new syntax, from the provided arguments (zero in the
example), without incurring any move construction.

I cannot easily copy 1-to-1 this solution, because in namespace boost name
in_place is reserved for the in-place factories:

I could simply go with a different name for a tag, but something tells me
it would introduce an unnecessary complications for users that want to
migrate from one optional to another. I could hack in-place factories so
that they can also be used as a tag, although, I am not sure it is doable
in a type-safe manner, and if it would not confuse people to have this
boost::in_place do a number of different things.

I could use a different namespace, but again, this might look surprising.I
am a bit torn.

I wonder if anyone here needed to face a similar problem, and if you can
think of an elegant solution.


Boost list run by bdawes at, gregod at, cpdaniel at, john at