c++ - Template parameter deduction with function pointers and references -


possible duplicate:
why qualifiers of template arguments stripped when deducing type?

consider following c++ code:

void f(int&);  template <typename t> void tpl(void (*)(t), t);  void bar(int& x) {         tpl(&f, x); } 

compilation using gcc 4.6.0 fails following error message:

fntpl.cpp: in function ‘void bar(int&)’: fntpl.cpp:7:11: error: no matching function call ‘tpl(void (*)(int&), int&)’ fntpl.cpp:7:11: note: candidate is: fntpl.cpp:3:46: note: template<class t> void tpl(void (*)(t), t) 

if state template parameters explicitely (tpl<int&>(&f, x)), works. why doesn't template argument deduction work in case?

because these fundamentally different

void f(int&); 

and

void (*)(t) 

the compiler has deduced t int, looks for:

void f(int); 

which nothing intention, change function pointer this:

template <typename t> void tpl(void (*)(t&), t); 

and compiler happy...


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -