Я провел серьезный рефакторинг некоторого кода C++ и обнаружил множество ошибок, возникающих из-за неявных преобразований, о которых я не знаю.
Пример
struct A *a();
bool b() {
return a();
}
void c() {
int64_t const d(b());
}
Проблемы
- В
b
тип возвращаемого значенияa
автоматически преобразуется вbool
. - В
c
значение, возвращенное изb
, автоматически повышается доint64_t
.
Вопрос
Как я могу получать предупреждения или ошибки для неявного преобразования между примитивными типами?
Примечание
- Использование
-Wconversion
, по-видимому, приводит только к нескольким произвольным преобразованиям, не связанным с приведенным выше примером. BOOST_STRONG_TYPEDEF
не подходит (мои типы должны быть POD, поскольку они используются в дисковых структурах).- C также представляет интерес, однако эта проблема относится к кодовой базе C++.