1 // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks
2 // expected-no-diagnostics
4 struct is_unary_block
{
5 static const bool value
= false;
8 template<typename T
, typename U
>
9 struct is_unary_block
<T (^)(U
)> {
10 static const bool value
= true;
13 int is_unary_block0
[is_unary_block
<int>::value
? -1 : 1];
14 int is_unary_block1
[is_unary_block
<int (^)()>::value
? -1 : 1];
15 int is_unary_block2
[is_unary_block
<int (^)(int, bool)>::value
? -1 : 1];
16 int is_unary_block3
[is_unary_block
<int (^)(bool)>::value
? 1 : -1];
17 int is_unary_block4
[is_unary_block
<int (^)(int)>::value
? 1 : -1];
20 struct is_unary_block_with_same_return_type_as_argument_type
{
21 static const bool value
= false;
25 struct is_unary_block_with_same_return_type_as_argument_type
<T (^)(T
)> {
26 static const bool value
= true;
29 int is_unary_block5
[is_unary_block_with_same_return_type_as_argument_type
<int>::value
? -1 : 1];
30 int is_unary_block6
[is_unary_block_with_same_return_type_as_argument_type
<int (^)()>::value
? -1 : 1];
31 int is_unary_block7
[is_unary_block_with_same_return_type_as_argument_type
<int (^)(int, bool)>::value
? -1 : 1];
32 int is_unary_block8
[is_unary_block_with_same_return_type_as_argument_type
<int (^)(bool)>::value
? -1 : 1];
33 int is_unary_block9
[is_unary_block_with_same_return_type_as_argument_type
<int (^)(int)>::value
? 1 : -1];
34 int is_unary_block10
[is_unary_block_with_same_return_type_as_argument_type
<int (^)(int, ...)>::value
? -1 : 1];
35 int is_unary_block11
[is_unary_block_with_same_return_type_as_argument_type
<int (^ const)(int)>::value
? -1 : 1];