> Good point. On a few ocasions I have use optional<> to pass optional
> parameters.
> However, I've came to the following:
> 
> Take you example for instance:
> 
> void fn(int iImportant, optional<int> iNotImportant = optional<int>())
> {
>   if ( !!iNotImportant )
>   {
>      // not important argument recieved, use it.
>     foo ( * iNotImportant ) ;
>   }
> }
> 
> Since optional<> uses pointer semantics, the above code could 
> have been
> written using a true pointer with nearly the same syntatic 
> usage of the
> optional parameter:
> 
> void fn(int iImportant, int* iNotImportant = NULL )
> {
>   if ( !!iNotImportant )
>   {
>      // not important argument recieved, use it.
>     foo ( * iNotImportant ) ;
>   }
> }

We already talked about this: pointer will add extra memory access, optional
should not (in fact it should be inlined and won't be different from by
value parameter)

> The constructor must be explicit in order to disable 
> unexpected implicit
> conversions.

Some may still prefer sometime

foo(3) 

to

foo(&lvalue(3));
foo(optional<T>(3));
 
implicit conversion to optional should not be dangerous anyway.

> Actually, optional<T> does not require T to be default constructable.
> The reason why you can't have optional<T&> is -at least- that 
> you cannot
> have a reference to a reference,
> and optional<T> uses "T {const} &" (for example, in the constructor).

use add_reference instead?

Gennadiy.
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to