2012-02-06 13 views
6

C++ estándar 11 8.5.4 ejemplo para la lista initializtion decir:lista de errores de inicialización de compilación

std::map<std::string,int> anim = { {"bear",4}, {"cassowary",2}, {"tiger",7} }; 

Pero he tratado de VC10, gcc 4.6 y Comeau, ninguno de los compilador dejar que esto pase? Porqué es eso ?

+4

El estándar de C++ 11 es muy nuevo, no todos los compiladores y bibliotecas de soporte de todo todavía. –

+6

GCC 4? 5, 4.6 y 4.7 compila eso si especifica '-std = C++ 0x'. – Mat

+0

[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'? –

Respuesta

3

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; 
} 
+0

@TomGarske: gracias por el amable recordatorio, solo hizo :) – Gob00st

Cuestiones relacionadas