block-explicit-return-type.c [plain text]
typedef float * PF;
float gf;
@interface NSView
- (id) some_method_that_returns_id;
@end
NSView *some_object;
void some_func (NSView * (^) (id));
typedef struct dispatch_item_s *dispatch_item_t;
typedef void (^completion_block_t)(void);
typedef double (^myblock)(int);
double test(myblock I);
int main()
{
__block int x = 1;
__block int y = 2;
^void *{ return 0; };
^float(float y){ return y; };
^double (float y, double d)
{
if (y)
return d;
else
return y;
};
const char * (^chb) (int flag, const char *arg, char *arg1) = ^ const char * (int flag, const char *arg, char *arg1) {
if (flag)
return 0;
if (flag == 1)
return arg;
else if (flag == 2)
return "";
return arg1;
};
^PF { return &gf; };
some_func(^ NSView * (id whatever) { return [some_object some_method_that_returns_id]; });
double res = test(^(int z){x = y+z; return (double)z; });
}
void func()
{
completion_block_t X;
completion_block_t (^blockx)(dispatch_item_t) = ^completion_block_t (dispatch_item_t item) {
return X;
};
completion_block_t (^blocky)(dispatch_item_t) = ^(dispatch_item_t item) {
return X;
};
blockx = blocky;
}
int (^(^block)(double x))(char, short);
void foo() {
int one = 1;
block = ^(double x){ return ^(char c, short y) { return one + c + y; };};
block = ^(double x){ return ^(char c, short y) { return one + (int)c + y; };};
}