Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   compilation error with function template parameter (http://www.velocityreviews.com/forums/t731922-compilation-error-with-function-template-parameter.html)

subramanian100in@yahoo.com, India 08-27-2010 12:09 PM

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


Victor Bazarov 08-27-2010 12:24 PM

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

mingze zhang 08-30-2010 01:48 AM

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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57