Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- using namespace std;
- template<typename T, typename = decltype(&T::size)>
- void f1(T)
- {}
- template<typename T, typename = decltype(&T::size)>
- void f2(T&)
- {}
- template<typename T, typename = decltype(&T::size)>
- void f3(T&&)
- {}
- int main()
- {
- vector<int> coll;
- f1(coll); // ok
- f2(coll); // ok
- f3(coll); // error : no matching function for call to 'f3'
- }
- template<typename T, typename = decltype(&std::remove_reference_t<T>::size)>
- void f3(T&&)
- {}
- #include <vector>
- #include <type_traits>
- using namespace std;
- template<typename T, typename = decltype(&T::size)>
- void f1(T)
- {}
- template<typename T, typename = decltype(&T::size)>
- void f2(T&)
- {}
- template<typename T, typename = decltype(&std::remove_reference_t<T>::size)>
- void f3(T&&)
- {}
- int main()
- {
- vector<int> coll;
- f1(coll); // ok
- f2(coll); // ok
- f3(coll); // ok
- }
- #include <vector>
- template<typename T>
- void foo(T&&){
- T nV = {3, 5, 6};
- }
- int main(){
- std::vector<int> Vec{1, 2 ,3, 4};
- foo(Vec);
- }
- #include <vector>
- template<typename T>
- void foo(T&&){
- using RemovedReferenceT = std::remove_reference_t<T>;
- RemovedReferenceT nV = {3, 5, 6};
- }
- int main(){
- std::vector<int> Vec{1, 2 ,3, 4};
- foo(Vec);
- }
- #include <vector>
- template<typename T>
- void foo(T&&){
- using RemovedReferenceT = std::remove_reference_t<T>;
- RemovedReferenceT nV = {3, 5, 6};
- nV[2] = 7; //woopsie
- }
- int main(){
- const std::vector<int> Vec{1, 2 ,3, 4}; //note the const
- foo(Vec);
- }
- #include <vector>
- template<typename T>
- void foo(T&&){
- using RRT = std::remove_reference_t<T>;
- using Removed_CV_of_RRT = std::remove_cv_t<RRT>;
- Removed_CV_of_RRT nV = {3, 5, 6};
- nV[2] = 7;
- }
- int main(){
- const std::vector<int> Vec{1, 2 ,3, 4};
- foo(Vec);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement