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