[Bug c++/30822] wrong choice of overloaded template functions in recursive call
Zarathustra at gentlemansclub dot de
gcc-bugzilla@gcc.gnu.org
Wed Feb 21 10:16:00 GMT 2007
------- Comment #4 from Zarathustra at gentlemansclub dot de 2007-02-21 10:16 -------
Now the code was also compiled with 4.3.0 and produced the same error message.
I can make the actual failure more specific: The following code compiles fine:
template<template<typename> class TOperator,typename TElement>
void for_all_5(TElement elem, cons_end tail);
template<template<typename> class TOperator,typename TElement, typename TTail>
void for_all_5(TElement elem, TTail tail)
{
TOperator<TElement>()(elem);
for_all_5<TOperator>(tail.elem,tail.tail);
}
template<template<typename> class TOperator,typename TElement>
void for_all_5(TElement elem, cons_end tail)
{
TOperator<TElement>()(elem);
}
// -- snip -- //
in main:
for_all_5<op>(list.elem,list.tail);
The difference is the forward declaration of the second for_all method.
>From my understanding of the standard it is not necessary to do the forward
declaration since by 14.6.4/1 declarations which are visible at the point of
instantiation are to be considered and by 14.6.4.1/1 the point of
instantiation of all template functions is at the definition of the main
function.
--
Zarathustra at gentlemansclub dot de changed:
What |Removed |Added
----------------------------------------------------------------------------
Version|4.1.2 |4.3.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30822
More information about the Gcc-bugs
mailing list