fpelliccioni

initializer_list / rvalue

May 10th, 2012
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. // clang++ -std=c++11 initlist_rvalue_test.cpp
  2. // clang++ -std=c++11 -stdlib=libc++ initlist_rvalue_test.cpp
  3.  
  4. #include <iostream>
  5. #include <initializer_list>
  6. #include <map>
  7. #include <string>
  8. #include <utility>
  9.  
  10. template <typename T>
  11. struct my_vector
  12. {
  13.     my_vector( )
  14.     {
  15.         std::cout << "my_vector - ctor" << std::endl;
  16.     }
  17.  
  18.     my_vector( std::initializer_list<T> init_list )
  19.     {
  20.         std::cout << "my_vector - init list ctor" << std::endl;
  21.     }
  22.  
  23.     my_vector( my_vector const& lvalue )
  24.     {
  25.         std::cout << "my_vector - copy ctor" << std::endl;
  26.     }
  27.  
  28.     my_vector& operator=( my_vector const& lvalue )
  29.     {
  30.         std::cout << "my_vector - copy assignment op" << std::endl;
  31.     }
  32.  
  33.     my_vector( my_vector && other )
  34.     {
  35.         std::cout << "my_vector - move ctor" << std::endl;
  36.     }
  37.  
  38.     my_vector& operator=( my_vector&& rvalue )
  39.     {
  40.         std::cout << "my_vector - move assignment op" << std::endl;
  41.     }
  42.  
  43.     ~my_vector()
  44.     {
  45.         std::cout << "my_vector dtor" << std::endl;
  46.     }
  47. };
  48.  
  49.  
  50.  
  51. template <typename T, typename U>
  52. struct my_pair
  53. {
  54.     T t_;
  55.     U u_;
  56.  
  57.     my_pair( T const& t, U const& u )
  58.         : t_( t ), u_( u )
  59.     {
  60.         std::cout << "pair ctor" << std::endl;
  61.     }
  62.  
  63. //  my_pair( T && t, U && u )
  64. //      : t_( std::forward<T>(t) ), u_( std::forward<U>(u) )
  65. //  {
  66. //      std::cout << "pair ctor - move" << std::endl;
  67. //  }
  68.  
  69.     template<typename T2, typename U2>
  70.     my_pair(T2&& t, U2&& u)
  71.         : t_( std::forward<T2>(t) ), u_( std::forward<U2>(u) )
  72.     {
  73.         std::cout << "pair ctor - move - template" << std::endl;
  74.     }
  75.  
  76.     my_pair( my_pair const& other )
  77.         : t_(other.t_), u_(other.u_)
  78.     {
  79.         std::cout << "pair copy ctor" << std::endl;
  80.     }
  81.  
  82.     my_pair( my_pair && other )
  83.         : t_( std::move(other.t_)), u_( std::move(other.u_))
  84.     {
  85.         std::cout << "pair move ctor" << std::endl;
  86.     }
  87.  
  88.     ~my_pair()
  89.     {
  90.         std::cout << "pair dtor" << std::endl;
  91.     }
  92.  
  93. };
  94.  
  95.  
  96. using namespace std;
  97.  
  98.  
  99. typedef std::pair<std::string, my_vector<string> > pair_type_4;
  100. typedef my_pair<std::string, my_vector<string> > pair_type_5;
  101.  
  102.  
  103.  
  104. int main( /* int argc, char* argv[] */ )
  105. {
  106.  
  107.     pair_type_4 p6_b ("list",  { "val1", "val2", "val3" }  );
  108.     //pair_type_4 p7_b ("list", my_vector<string>() );
  109.  
  110.  
  111.     //pair_type_5 p6 ("list", { "val1", "val2", "val3" } );
  112.     //pair_type_5 p7 ("list", my_vector<string>() );
  113.  
  114.  
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment