Dzięki za wszystkie odpowiedzi w komentarzach.
Potem sprawdziłem standard C++ 98 i 03, a tak, 8.5.4 jest zdecydowanie nową sekundą w C++ 11! Dlatego nie jest w pełni obsługiwany przez wszystkie kompilatory.
Po dodaniu flagi -std = C++ 0x z gcc 4.6.1 teraz kompiluje się dobrze.
Dodawanie kodu testowego do niczego, którzy mogą potrzebować odniesienie:
#include <map>
#include <string>
#include <initializer_list>
#include <iostream>
using namespace std;
int main()
{
std::map<std::string,int> collection = {{"bear",4}, {"cassowary",2}, {"tiger",7}};
for(auto it: collection)
std::cout << it.first << " has value " << it.second << std::endl;
return 0;
}
standard C++ 11 jest bardzo nowy, nie wszystkie kompilatory i biblioteki obsługują jeszcze wszystkiego. –
GCC 4? 5, 4.6 i 4.7 kompilują to, jeśli podasz '-std = C++ 0x'. – Mat
[Works] (http://ideone.com/37oqu) dla mnie na gcc 4.5.1. Jaki jest błąd, który otrzymujesz? Być może nie włączyłeś '-std = C++ 0x'? –