2009/5/6 dariomt <dariomt@gmail.com>
Roman Perepelitsa <roman.perepelitsa <at> gmail.com> writes:

>
> 2009/5/6 Roman Perepelitsa <roman.perepelitsa <at> gmail.com>
> It's less efficient, because all arguments will be copied. It's also more
typing, longer compilation times and more code generated. 
>
>
> There is one more caveat. This approach does not work with polymorphic types
(you'll get slicing). I don't think there are any advantages in passing
boost::optional<T> compared to const T*.Roman Perepelitsa.
>
>

Thanks for the answer!

Is there a way to avoid the copy (and thus the slicing)? Perhaps using
boost::optional<T&> or boost::optional< boost::reference_wrapper<T> > ?

You can use boost::optional<T&>, but it's a rather strange beast and it acts a bit differently from normal optional values.

Roman Perepelitsa.