Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.80 KB | None | 0 0
  1. #include <vector>
  2.  
  3. using namespace std;
  4.  
  5. template<typename T, typename = decltype(&T::size)>
  6. void f1(T)
  7. {}
  8.  
  9. template<typename T, typename = decltype(&T::size)>
  10. void f2(T&)
  11. {}
  12.  
  13. template<typename T, typename = decltype(&T::size)>
  14. void f3(T&&)
  15. {}
  16.  
  17. int main()
  18. {
  19. vector<int> coll;
  20.  
  21. f1(coll); // ok
  22. f2(coll); // ok
  23. f3(coll); // error : no matching function for call to 'f3'
  24. }
  25.  
  26. template<typename T, typename = decltype(&std::remove_reference_t<T>::size)>
  27. void f3(T&&)
  28. {}
  29.  
  30. #include <vector>
  31. #include <type_traits>
  32.  
  33. using namespace std;
  34.  
  35. template<typename T, typename = decltype(&T::size)>
  36. void f1(T)
  37. {}
  38.  
  39. template<typename T, typename = decltype(&T::size)>
  40. void f2(T&)
  41. {}
  42.  
  43. template<typename T, typename = decltype(&std::remove_reference_t<T>::size)>
  44. void f3(T&&)
  45. {}
  46.  
  47. int main()
  48. {
  49. vector<int> coll;
  50.  
  51. f1(coll); // ok
  52. f2(coll); // ok
  53. f3(coll); // ok
  54. }
  55.  
  56. #include <vector>
  57.  
  58. template<typename T>
  59. void foo(T&&){
  60. T nV = {3, 5, 6};
  61. }
  62.  
  63. int main(){
  64. std::vector<int> Vec{1, 2 ,3, 4};
  65. foo(Vec);
  66. }
  67.  
  68. #include <vector>
  69.  
  70. template<typename T>
  71. void foo(T&&){
  72. using RemovedReferenceT = std::remove_reference_t<T>;
  73. RemovedReferenceT nV = {3, 5, 6};
  74. }
  75.  
  76. int main(){
  77. std::vector<int> Vec{1, 2 ,3, 4};
  78. foo(Vec);
  79. }
  80.  
  81. #include <vector>
  82.  
  83. template<typename T>
  84. void foo(T&&){
  85. using RemovedReferenceT = std::remove_reference_t<T>;
  86. RemovedReferenceT nV = {3, 5, 6};
  87. nV[2] = 7; //woopsie
  88. }
  89.  
  90. int main(){
  91. const std::vector<int> Vec{1, 2 ,3, 4}; //note the const
  92. foo(Vec);
  93. }
  94.  
  95. #include <vector>
  96.  
  97. template<typename T>
  98. void foo(T&&){
  99. using RRT = std::remove_reference_t<T>;
  100. using Removed_CV_of_RRT = std::remove_cv_t<RRT>;
  101.  
  102. Removed_CV_of_RRT nV = {3, 5, 6};
  103. nV[2] = 7;
  104. }
  105.  
  106. int main(){
  107. const std::vector<int> Vec{1, 2 ,3, 4};
  108. foo(Vec);
  109. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement