Я наткнулся на любопытную проблему с типом возврата BOOL
в блоках. Имея следующее определение:
typedef BOOL (^BoolBlock)(void);
... этот код проходит:
BoolBlock foo = ^{ return YES; };
... но это не скомпилируется:
BoolBlock bar = ^{ return YES || NO; };
Со следующим сообщением об ошибке:
Несовместимые типы указателей блоков инициализация "BoolBlock" (он же BOOL (^) (void) ') с выражением типа 'int (^) (void)'
Я могу решить проблему с использованием явного приведения, но не должно ли это работать без нее? Есть ли лучшее решение?