invoke_void_0.pass.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <functional>
  10. // class function<R(ArgTypes...)>
  11. // R operator()(ArgTypes... args) const
  12. #include <functional>
  13. #include <new>
  14. #include <cstdlib>
  15. #include <cassert>
  16. // 0 args, return void
  17. int count = 0;
  18. void f_void_0()
  19. {
  20. ++count;
  21. }
  22. struct A_void_0
  23. {
  24. void operator()() {++count;}
  25. };
  26. void
  27. test_void_0()
  28. {
  29. int save_count = count;
  30. // function
  31. {
  32. std::function<void ()> r1(f_void_0);
  33. r1();
  34. assert(count == save_count+1);
  35. save_count = count;
  36. }
  37. // function pointer
  38. {
  39. void (*fp)() = f_void_0;
  40. std::function<void ()> r1(fp);
  41. r1();
  42. assert(count == save_count+1);
  43. save_count = count;
  44. }
  45. // functor
  46. {
  47. A_void_0 a0;
  48. std::function<void ()> r1(a0);
  49. r1();
  50. assert(count == save_count+1);
  51. save_count = count;
  52. }
  53. }
  54. int main()
  55. {
  56. test_void_0();
  57. }