Есть non-narrowing инициализация: long l = 0; int i {l};
= ошибка. Хочу такой же typecast.
Вот так работает:
long l = 0;
void f(int) {}
f((int){l}); // ошибка
f({l}); // тоже ошибка
…но компилятор выплёвывает warning: -Wpedantic: "ISO C++ forbids compound-literals"
. Гы, неужели я слишком многого хочу? :)
Сделал в итоге вот такую дичь:
template<class R, class P> R safeCast(P x) {
R y {x};
return y;
}
f(safeCast<int>(l)); // ошибка
Не ругается, но дюже громозко (жду каментов «это ж плюсы, пора бы и привыкнуть»).
Есть ещё варианты?