On 11/20/2014 09:12 AM, Vicente J. Botet Escriba wrote:
Le 19/11/14 22:36, Vladimir Batov a écrit :
... On the second thought I might probably agree that op<() might be questionable... Can we address that differently then? Say,
bool operator<(T const&, optional<T> const&) { BOOST_STATIC_ASSERT(); }
I don't think this is a solution. User defining its own function
void f(optional<T>, optional<T>);
would need to add the following?
void f(T, optional<T>) { BOOST_STATIC_ASSERT(); } void f(optional<T>, T) { BOOST_STATIC_ASSERT(); }
What if there are 3 optional parameters? We can not say to the user that they need to program this way.
That's immensely different... and it should not be prohibited... T to optional<T> is natural propagation/conversion... as 'int' to 'double'. That should happen automatically and seamlessly... as 'int' to 'double'. In the other direction -- optional<T> to T -- like double to int, needs to be explicit... and it is.