My question is answered.
George wrote:
Thanks Igor,
vector<int>::iterator::value_type; // should be int* ?
It doesn't even have to compile. vector<int>::iterator doesn't have to
provide value_type typedef. It doesn't even have to be a class type.
I have tried again that the code can compile. I am using Visual Studio 2005.
Here is the simplified version,
#include <vector>
#include <iostream>
using namespace std;
int main (int argc, char **argv)
{
vector<int>::iterator::value_type;
return 0;
}
From the hover help, I can see vector<int>::iterator::value_type is defined
to int, but I do not know how it happens and implemented. It is appreciated
if you could let me know how internally vector<int>::iterator::value_type is
transferred to int.
vector<int>::iterator::value_type is not a valid expression - it happens
to work on some libraries, but won't work on others, so you should never
use it. The valid expression you want is:
(#include <iterator>)
iterator_traits<vector<int>::iterator>::value_type
iterator_traits<T> is a class template that gives you information about
an iterator type. If the iterator type is a pointer (e.g. T*), it knows
to say that the value_type is T (it uses partial template specialization
to do this). In VC7.1+, std::vector<T>::iterator is a class type that
has a typedef named value_type, but this is not a requirement, and some
libraries have std::vector<T>::iterator == T*.
Tom