![]() |
compilation error with function template parameter
The following quesion is NOT a HOMEWORK problem.
Consider the following x.cpp: #include <cstdlib> #include <iostream> using namespace std; template<class T> inline void fn(void (T::*memfnPtr)()) { return; } class Test { public: void member(); void member() const; }; inline void Test::member(void) { cout << "Test::member() called" << endl; return; } inline void Test::member(void) const { cout << "Test::member() const called" << endl; return; } int main() { fn(&Test::member); return EXIT_SUCCESS; } When I compile this program with g++3.4.3 as g++ -std=c++98 -pedantic -Wall -Wextra x.cpp I get the following compilation error: x.cpp: In function `int main()': x.cpp:35: error: no matching function for call to `fn(<unknown type>)' Why do I get this compilation error ? Kindly explan. Please help to fix this error. I do not get the compilation error, if I have the function template 'fn()' as follows: template<class T> inline void fn(void (T::*memfnPtr)() const) { return; } Note that in the above modified version of 'fn()', I have added 'const' to the parameter. Why don't I get the compilation error for this version but I do get for the earlier version ? Thanks V.Subramanian |
Re: compilation error with function template parameter
On 8/27/2010 8:09 AM, subramanian100in@yahoo.com, India wrote:
> The following quesion is NOT a HOMEWORK problem. > > Consider the following x.cpp: > > #include<cstdlib> > #include<iostream> > > using namespace std; > > template<class T> > inline void fn(void (T::*memfnPtr)()) > { > return; > } > > class Test > { > public: > void member(); > void member() const; > }; > > inline void Test::member(void) > { > cout<< "Test::member() called"<< endl; > > return; > } > > inline void Test::member(void) const > { > cout<< "Test::member() const called"<< endl; > > return; > } > > int main() > { > fn(&Test::member); > > return EXIT_SUCCESS; > } > > When I compile this program with g++3.4.3 as > g++ -std=c++98 -pedantic -Wall -Wextra x.cpp > > I get the following compilation error: > x.cpp: In function `int main()': > x.cpp:35: error: no matching function for call to `fn(<unknown type>)' > > Why do I get this compilation error ? Kindly explan. Please help to > fix this error. I do not get the compilation error, if I have the > function template 'fn()' as follows: > template<class T> > inline void fn(void (T::*memfnPtr)() const) > { > return; > } > > Note that in the above modified version of 'fn()', I have added > 'const' to the parameter. Why don't I get the compilation error > for this version but I do get for the earlier version ? Most likely a bug in the compiler. Comeau C++ accepts the code without a hiccup. So does Visual C++ 2008 (it points out that the argument of the template 'fn' is unused, but it's a warning). V -- I do not respond to top-posted replies, please don't ask |
Re: compilation error with function template parameter
On Aug 27, 8:24*pm, Victor Bazarov <v.baza...@comcast.invalid> wrote:
> On 8/27/2010 8:09 AM, subramanian10...@yahoo.com, India wrote: > > > > > > > The following quesion is NOT a HOMEWORK problem. > > > Consider the following x.cpp: > > > #include<cstdlib> > > #include<iostream> > > > using namespace std; > > > template<class T> > > inline void fn(void (T::*memfnPtr)()) > > { > > * * * * *return; > > } > > > class Test > > { > > public: > > * * *void member(); > > * * *void member() const; > > }; > > > inline void Test::member(void) > > { > > * * * * *cout<< *"Test::member() called"<< *endl; > > > * * * * *return; > > } > > > inline void Test::member(void) const > > { > > * * * * *cout<< *"Test::member() const called"<< *endl; > > > * * * * *return; > > } > > > int main() > > { > > * * * * *fn(&Test::member); > > > * * * * *return EXIT_SUCCESS; > > } > > > When I compile this program with g++3.4.3 as > > g++ -std=c++98 -pedantic -Wall -Wextra x.cpp > > > I get the following compilation error: > > x.cpp: In function `int main()': > > x.cpp:35: error: no matching function for call to `fn(<unknown type>)' > > > Why do I get this compilation error ? Kindly explan. Please help to > > fix this error. I do not get the compilation error, if I have the > > function template 'fn()' as follows: > > template<class T> > > inline void fn(void (T::*memfnPtr)() const) > > { > > * * * * *return; > > } > > > Note that in the above modified version of 'fn()', I have added > > 'const' to the parameter. Why don't I get the compilation error > > for this version but I do get for the earlier version ? > > Most likely a bug in the compiler. *Comeau C++ accepts the code without > a hiccup. *So does Visual C++ 2008 (it points out that the argument of > the template 'fn' is unused, but it's a warning). > > V > -- > I do not respond to top-posted replies, please don't ask Additional info: On g++ 4.4.3-4ubuntu5, the above code is fine too. 3.4.3 was released in November 4, 2004, probably it's too old to differentiate the pointers to member functions overloaded by const? |
| All times are GMT. The time now is 04:34 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.