temp_class_spec_blocks.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // RUN: %clang_cc1 -fsyntax-only -verify %s -fblocks
  2. // expected-no-diagnostics
  3. template<typename T>
  4. struct is_unary_block {
  5. static const bool value = false;
  6. };
  7. template<typename T, typename U>
  8. struct is_unary_block<T (^)(U)> {
  9. static const bool value = true;
  10. };
  11. int is_unary_block0[is_unary_block<int>::value ? -1 : 1];
  12. int is_unary_block1[is_unary_block<int (^)()>::value ? -1 : 1];
  13. int is_unary_block2[is_unary_block<int (^)(int, bool)>::value ? -1 : 1];
  14. int is_unary_block3[is_unary_block<int (^)(bool)>::value ? 1 : -1];
  15. int is_unary_block4[is_unary_block<int (^)(int)>::value ? 1 : -1];
  16. template<typename T>
  17. struct is_unary_block_with_same_return_type_as_argument_type {
  18. static const bool value = false;
  19. };
  20. template<typename T>
  21. struct is_unary_block_with_same_return_type_as_argument_type<T (^)(T)> {
  22. static const bool value = true;
  23. };
  24. int is_unary_block5[is_unary_block_with_same_return_type_as_argument_type<int>::value ? -1 : 1];
  25. int is_unary_block6[is_unary_block_with_same_return_type_as_argument_type<int (^)()>::value ? -1 : 1];
  26. int is_unary_block7[is_unary_block_with_same_return_type_as_argument_type<int (^)(int, bool)>::value ? -1 : 1];
  27. int is_unary_block8[is_unary_block_with_same_return_type_as_argument_type<int (^)(bool)>::value ? -1 : 1];
  28. int is_unary_block9[is_unary_block_with_same_return_type_as_argument_type<int (^)(int)>::value ? 1 : -1];
  29. int is_unary_block10[is_unary_block_with_same_return_type_as_argument_type<int (^)(int, ...)>::value ? -1 : 1];
  30. int is_unary_block11[is_unary_block_with_same_return_type_as_argument_type<int (^ const)(int)>::value ? -1 : 1];