Можно определить и скопировать инициализацию переменной внутри условия оператора if
:
if(int i = 17) { ... }
Это также работает с пользовательскими типами, учитывая, что они перегружают operator bool
:
if(Foo f = 42) { ... }
if(Foo f = Foo(43)) { ... }
Почему я не могу использовать прямую инициализацию, например следующее:
if(Foo f(51)) { ... }
GCC испускает error: expected primary-expression before 'f'
.
Есть ли причина, кроме "потому что грамматика говорит так"? И как я могу обойти это?
Я работаю с VС++ 03, где Foo
:
- - это объект, чувствительный к RAII, для которого я позаботился о том, чтобы не определять конструктор копирования
- - это шаблон, принимающий аргументы пользователя
- имеет конструктор с двумя параметрами
... поэтому я бы предпочел не копировать его или не повторять его тип.
Примечание. Хотя моя фактическая проблема связана с С++ 03, я (академически) интересуюсь ответами на С++ 11.