Re: template function instantiation
George wrote:
1.
Seems VC is not using two step name lookup?
Does it?
2.
--------------------
void g (int a); // declaration only
template <class T> void f(T a) {g (a);}
void g (double a); // declaration only
--------------------
Do you think in the above code segment, g (int) declaration and g
(double) declaration will instantise function f with int and double
respectively?
Instantiation of 'f' depends on its _use_ or explicit instantiation
and has NOTHING to do with the actual meaning of the 'g' symbol.
The existence of 'g' declaration before the 'f' template is needed
to allow proper parsing of the body of the 'f' function. However,
for all we know it could have been an object (and not a function).
Or it could have been a type. Or a macro that expands into someth
acceptable by the compiler. However, it has NOTHING to do with
the instantiation of 'f'. Instantiation may not even exist, yet
the declaration of 'g' is required -- to allow the definition of
'f' to be compiled.
Separate declaration, definition, and instantiation, whether of
a type or of a template, in your mind. They are interconnected,
of course, but not as close as you seem to believe.
How do you prove your conclusions?
I am not going to prove anything, sorry. If you have doubts, and
I am unable to clear them, it's not my problem.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask