Advertisement
Guest User

tests lambda function const

a guest
Feb 13th, 2013
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include<iostream>
  2. #include<functional>
  3. #include<boost/function.hpp>
  4.  
  5. struct A
  6. {
  7.     static int s;
  8.     int i;
  9.     A() : i(++s)
  10.     { std::cout << "ctorA : " << i << std::endl; }
  11.     A(A const &) : i(++s)
  12.     { std::cout << "copyA : " << i << std::endl; }
  13.     ~A()
  14.     { std::cout << "dtorA : " << i << std::endl; }
  15.     A(A&&) =delete;
  16.     A& operator=(A const &) =delete;
  17.     A& operator=(A&&) =delete;
  18. };
  19.  
  20. int A::s = 0;
  21.  
  22. //Case lambda/function
  23. /*struct L
  24. {
  25.     A& a;
  26.     L(A& a) : a(a)
  27.     { std::cout << "ctorL " << std::endl; }
  28.     L(L const & l) : a(l.a)
  29.     { std::cout << "copyL " << std::endl; }
  30.     ~L()
  31.     { std::cout << "dtorL " << std::endl; }
  32.     A operator()() const
  33.     { return a; }
  34.     L(L&&) =delete;
  35.     L& operator=(L const &) =delete;
  36.     L& operator=(L&&) =delete;
  37. };
  38.  
  39. struct F
  40. {
  41.     L l;
  42.     F(L const & l) : l(l)
  43.     { std::cout << "ctorF " << std::endl; }
  44.     F(F const & f) : l(f.l)
  45.     { std::cout << "copyF " << std::endl; }
  46.     ~F()
  47.     { std::cout << "dtorF " << std::endl; }
  48.     A const & operator()() const
  49.     { return l(); }
  50.     F(F&&) =delete;
  51.     F& operator=(F const &) =delete;
  52.     F& operator=(F&&) =delete;
  53. };*/
  54.  
  55. //Case 1
  56. /*struct B
  57. {
  58.     A const & a;
  59.     B() : a(A())
  60.     { std::cout << "ctorB " << std::endl; }
  61.     ~B()
  62.     { std::cout << "dtorB " << std::endl; }
  63.     B(B const &) =delete;
  64.     B(B&&) =delete;
  65.     B& operator=(B const &) =delete;
  66.     B& operator=(B&&) =delete;
  67. };
  68.  
  69. //Case 2
  70. void foo(A const &)
  71. { }*/
  72.  
  73. //Case 3
  74. /*A const & foo()
  75. { return A(); }*/
  76.  
  77. //Case 4
  78. /*struct B
  79. {
  80.     A const & a;
  81.     B(A const & a) : a(a)
  82.     { std::cout << "ctorB " << std::endl; }
  83.     ~B()
  84.     { std::cout << "dtorB " << std::endl; }
  85.     B(B const &) =delete;
  86.     B(B&&) =delete;
  87.     B& operator=(B const &) =delete;
  88.     B& operator=(B&&) =delete;
  89. };*/
  90.  
  91. //Case 5
  92. /*A const & foo(A const & a)
  93. { return a; }*/
  94.  
  95. //Case 6
  96. /*A const & foo(A a)
  97. { return a; }*/
  98.  
  99. int main()
  100. {
  101.     //Case 1
  102. /*  std::cout << "1/ ";
  103.     B b;
  104.     std::cout << "2/ ";*/
  105.     //Warn
  106.  
  107.     //Case 2
  108. /*  std::cout << "1/ ";
  109.     foo(A());
  110.     std::cout << "2/ ";*/
  111.  
  112.     //Case 3
  113. /*  std::cout << "1/ ";
  114.     A const & a = foo();
  115.     std::cout << "2/ ";*/
  116.     //Warn
  117.  
  118.     //Case 4
  119. /*  std::cout << "1/ ";
  120.     B* b = new B(A());
  121.     std::cout << "2/ ";
  122.     delete b;
  123.     std::cout << "3/ ";*/
  124.  
  125.     //Case 5
  126. /*  std::cout << "1/ ";
  127.     A const & a = foo(A());
  128.     std::cout << "2/ ";*/
  129.  
  130.     //Case 6
  131. /*  std::cout << "1/ ";
  132.     A a1;
  133.     std::cout << "2/ ";
  134.     A const & a2 = foo(a1);
  135.     std::cout << "3/ ";*/
  136.     //Warn
  137.  
  138.     //Case lambda/function
  139. /*  std::cout << "1/ ";
  140.     A a1;
  141.     std::cout << "2/ ";
  142.     L l(a1);
  143.     std::cout << "3/ ";
  144.     F f(l);
  145.     std::cout << "4/ ";
  146.     A const & a2 = f();
  147.     std::cout << "5/ ";*/
  148.  
  149.     //Case True
  150. /*  std::cout << "1/ ";
  151.     A a1;
  152.     std::cout << "2/ ";
  153.     auto l = [&a1]{return a1;};
  154.     std::cout << "3/ ";
  155.     std::function<A const & ()> f(l);
  156.     std::cout << "4/ ";
  157.     A const & a2 = f();
  158.     std::cout << "5/ ";*/
  159.  
  160.     //Case Boost
  161. /*  std::cout << "1/ ";
  162.     A a1;
  163.     std::cout << "2/ ";
  164.     auto l = [&a1]{return a1;};
  165.     std::cout << "3/ ";
  166.     boost::function<A const & ()> f(l);
  167.     std::cout << "4/ ";
  168.     A const & a2 = f();
  169.     std::cout << "5/ ";*/
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement