c++ - Why is T&& instantiated as int&? -


can please explain why compiles , why t end type int&?

#include <utility>  void f(int& r) {     ++r; }  template <typename fun, typename t> void g(fun fun, t&& t)  {      fun(std::forward<t>(t));  }  int main() {     int = 0;      g(f, i); } 

i see on gcc 4.5.0 20100604 , gdb 7.2-60.2

because of perfect forwarding, when argument p&& lvalue, p deduced argument's type plus having & attached. int & && p being int&. if argument rvalue p deduced argument's type, would int&& argument p being int if pass, example 0 directly.

int& && collapse int& (this semantic view - syntactically int& && illegal. saying u && when u template parameter or typedef refering type int&, u&& still type int& - i.e 2 references "collapse" 1 lvalue reference). that's why t has type int&.


Comments

Popular posts from this blog

asp.net - repeatedly call AddImageUrl(url) to assemble pdf document -

java - Android recognize cell phone with keyboard or not? -

iphone - How would you achieve a LED Scrolling effect? -