Yes, it has both operator(T) and operator RestrictedBool

Still, i don't see a problem - 
if (opt1 == false)
is equal to
if (opt1.operator==(false))
than expression is false. 

If it is equal to
if (bool(opt1) == false)
than we have a problem. However, why the hell should compiler try to convert 
types if he has exact match for an operator to call?

Иван Комиссаров

21 авг. 2014 г., в 18:10, Thiago Macieira <[email protected]> 
написал(а):

On Thursday 21 August 2014 11:34:17 Иван Комиссаров wrote:
> Иван Комиссаров
> 
> 21 авг. 2014 г., в 2:10, Thiago Macieira <[email protected]> 
написал(а):
>>> The optional-cast-to-boolean is a source of problems for the current
>>> std::optional. That hasn't been solved.
>>> 
>>> QOptional<bool> opt1 = false;
>>> QOptional<int> opt2 = 0;
>>> if (opt1)
>>> 
>>>     // this is true!
>>> 
>>> if (opt2)
>>> 
>>>     // this is false!
>> 
>> Hm, what? QOptional has no operator T and can't be converted to any value
>> (bool or not) directly.
>> 
>> QOptional<bool> opt1 = false;
>> QOptional<int> opt2 = 0;
>> if (opt1)
>>      // this is true!
>> if (*opt1)
>>      // this is false!
>> if (opt2)
>>      // this is true!
>> if (*opt2)
>>      // this is false!
> 
> Sorry, then:
> 
> if (opt1 == false)
>       // ?
> if (opt2 == false)
>       // ?
> 
> Does it have operator==(T)? Does it have operator RestrictedBool() / explicit 
> operator bool()?
> 
> Then there is a problem.
> --

_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to