Gracias por todas las respuestas en los comentarios.
Luego revisé el estándar C++ 98 y 03 y sí, 8.5.4 es definitivamente un nuevo segundo en C++ 11! Es por eso que no es totalmente compatible con todos los compiladores.
Después de agregar flag -std = C++ 0x con gcc 4.6.1 ahora esto compila bien.
Agregar el código de prueba para cualquier cosa que pueda necesitar una referencia:
#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;
}
El estándar de C++ 11 es muy nuevo, no todos los compiladores y bibliotecas de soporte de todo todavía. –
GCC 4? 5, 4.6 y 4.7 compila eso si especifica '-std = C++ 0x'. – Mat
[Works] (http://ideone.com/37oqu) para mí en gcc 4.5.1. ¿Cuál es el error que obtienes? Quizás no has habilitado '-std = C++ 0x'? –