The auto keyword is simply asking the compiler to deduce the type of the variable from the initialization.
Even a pre-C++0x compiler knows what the type of an (initialization) expression is, and more often than not, you can see that type in error messages.
#include <vector> #include <iostream> using namespace std; int main() { vector<int>s; s.push_back(11); s.push_back(22); s.push_back(33); s.push_back(55); for (int it=s.begin();it!=s.end();it++){ cout<<*it<<endl; } } Line 12: error: cannot convert '__gnu_debug::_Safe_iterator<__gnu_cxx::__normal_iterator<int*, __gnu_norm::vector<int, std::allocator<int> > >, __gnu_debug_def::vector<int, std::allocator<int> > >' to 'int' in initialization
The auto keyword simply allows you to take advantage of this knowledge – if you (compiler) know the right type, just choose for me!