Код: Выделить всё
struct C {
explicit operator bool() const {
return true;
}
};
int main() {
C c;
auto b = static_cast(c);
return 0;
}
Код: Выделить всё
test.cpp: In function ‘int main()’:
test.cpp:12:14: error: invalid ‘static_cast’ from type ‘C’ to type ‘const bool&’
12 | auto b = static_cast(c);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Эта несовместимость возникла в моем коде, потому что тестовые макросы Catch2 используют такой тип static_cast под капотом и он терпит неудачу с пользовательским типом с явным оператором bool, но только с G++.
Мне кажется, что, поскольку временный тип bool может быть привязан к константе bool &, это должно быть разрешено.
Кто здесь, следует стандарту?
Подробнее здесь: https://stackoverflow.com/questions/787 ... rator-bool
Мобильная версия