2013-04-02 16 views
6

sto cercando di compilare the code taken from hereunordered_map - {{chiave, valore}, {key, value}} sintassi non valida

// constructing unordered_maps 
#include <iostream> 
#include <string> 
#include <unordered_map> 

typedef std::unordered_map<std::string,std::string> stringmap; 

stringmap merge (stringmap a,stringmap b) { 
    stringmap temp(a); temp.insert(b.begin(),b.end()); return temp; 
} 

int main() 
{ 
    stringmap first;        // empty 
    stringmap second ({{"apple","red"},{"lemon","yellow"}});  // init list 
    stringmap third ({{"orange","orange"},{"strawberry","red"}}); // init list 
    stringmap fourth (second);     // copy 
    stringmap fifth (merge(third,fourth));  // move 
    stringmap sixth (fifth.begin(),fifth.end()); // range 

    std::cout << "sixth contains:"; 
    for (auto& x: sixth) std::cout << " " << x.first << ":" << x.second; 
    std::cout << std::endl; 

    return 0; 
} 

con MSVC2012 ma sto ricevendo

errore C2143: errore di sintassi: manca ')' prima '{'

sulla linea di codice

stringmap second ({{"apple","red"},{"lemon","yellow"}});  // init list 

Mi manca qualcosa?

+0

funziona per gcc: https://ideone.com/qkOUMN – moooeeeep

risposta

5

In Visual Studio 2012 mancano molte delle funzionalità C++ moderne, tra cui lo initialiser lists. Vedi here per una panoramica.

+0

Questo non è del tutto corretto. – Puppy

+3

Eppure, per ora è vero. Non ho detto che non arriverà mai allo –

2

Per essere più precisi, gli elenchi di inizializzatori sono presenti nel CTP VS2012, ma quell'aggiornamento non è ancora stato pubblicato e non contiene il supporto per gli elenchi di inizializzatore nella libreria Standard- IOW, sono vicini, ma Microsoft non ha " li ho già completamente finiti.

4

Non c'è niente di sbagliato nel codice e si integra bene con GCC e Clang. Il problema è con Visual C++.

Gli elenchi di inizializzatori sono una delle funzionalità che saranno disponibili in Visual Studio 2012 Update 2. Ciò significa che al momento non è possibile utilizzare questa funzionalità in Visual Studio 2012. Esiste una serie di Community Tech Previews (CTP) ma presentano alcuni problemi minori tra cui un supporto IntelliSense mancante e disclaimer molto chiari che affermano che non sono pensati per essere utilizzati per il codice di produzione.

Quindi, in breve: il codice è corretto, ma non verrà compilato in VS2012 fino a quando Microsoft non rilascerà Visual Studio 2012 Update 2. Non si sa quando arriverà, ma Visual Studio 2012 è stato rilasciato per la prima volta nell'agosto 2012 e l'ultimo aggiornamento (Aggiornamento 1) è stato rilasciato a novembre 2012. Da allora, ci sono state poche notizie sull'argomento, ma è stato "in arrivo" dalla fine dell'anno scorso.

Aggiornamento Ora, Update 2 è stato rilasciato. Tuttavia, non include qualsiasi dei miglioramenti C++ promessi dai CTP Update 2. Questo è divertente, considerando che dovrebbero essere anteprime di ciò che verrà nell'aggiornamento 2. Apparentemente, il team di Visual C++ è "attualmente finalizzando i piani di rilascio per quelle funzionalità" e "condividerà presto più dettagli" . (dai commenti sullo Update 2 release announcement.)

+0

ultimamente, sia per l'erba che per la pesca. lavavej sono stati piuttosto tranquilli sul loro blog/canale 9, che potrebbe indicare una prossima versione – TemplateRex

+0

@rhalbersma Spero tu abbia ragione. Sarebbe grandioso. – Agentlien

+0

Lo spero anch'io, ma mi sto irritando molto con il programma di MS. E hanno ancora alias di template, = delete/= default, noexcept, constexpr e altri extra da coprire. – TemplateRex

Problemi correlati