Ошибка в том, что троичный оператор должен иметь один тип, а выражение (1=1) ? f() : false
имеет два типа - f()
имеет тип TypesafeBool
, а false
имеет тип bool
. Вы можете конвертировать между ними, но Comeau не знает, что вы хотите использовать. Чтобы решить эту проблему, приведите одну из сторон тройной к типу другой: (1=1) ? f() : TypesafeBool(false)
.
Comeau здесь правильно, поскольку для наблюдателя очевидно, какой тип должен принимать результат, троичное выражение должно иметь отдельный тип самостоятельно, без ссылки на то, в каком оно используется, и тип, который он должен выбрать: неоднозначный.