Вы, наверное, уже поняли это, но это:
UIViewController tmp*=_currentViewController;
интерпретируется как:
UIViewController tmp *= _currentViewController;
, который является присваиванием операцией умножения с LHS, который является объявлением объекта (без указателя) с именем "tmp". Указатель объекта с именем "_currentViewController" является другим операндом.
Таким образом, это более простое утверждение выдает ту же ошибку:
int a *= b;
Обычно у вас есть что-то вроде:
a *= b;
, который расширяется до:
a = a * b;
Однако в этом случае LHS - это не просто «a», а объявление «int a».
Моя догадка в том, что из-за этого странного значения LHS компилятор интерпретирует расширение этого значения примерно так:
int a { return a * b; }
, которая явно является вложенной функцией .