Literal @YES not working in iOS 5 / Xcode 4.4

ios, literals, llvm, llvm-4.0, objective-c

Solution

The reason is Apple forgot the parentheses here:

#define YES             (BOOL)1

This will be fixed in iOS 6 SDK:

#define YES             ((BOOL)1)

In the meantime you must type `@(YES)`.

Problem

New Xcode 4.4 is out and it should support literals like `@42` `@"String"` `@23.0L` `@{ @"key" : obj }` and `@[obj1, obj2]` and it should also support `@YES` and `@NO`, which isn't working when targeting latest iOS 5 (and prior). After compiling it show the error message: Unexpected type name 'BOOL': expected expression I know you can fix it by typing `@(YES)` and `@(NO)`. But I want to know the reason why it isn't working as expected.

Original source

Related problems