Alcuni esempi di codice della "quarta edizione del linguaggio di programmazione C++" mi confondono. Ecco i miei casi di test.l'inizializzazione del lvalue non riesce
Env versione di gcc 4.6.3 (Debian 4.6.3-14 + rpi1) con -std = C++ 0x
- Code1
string var {"Cambridge"}; string& r1 {var};
compilazione fallisce - Code2
string var {"Cambridge"}; string& r1 = var;
Compilazione riuscire - Code3
string var {"Cambridge"}; string&& r1 {var};
Compilazione riuscire - Code1 Compilazione Fails con
g++ -g -DLINUX -std=c++0x -c src/dummy.cpp -o src/dummy.o src/dummy.cpp: In function ‘int main(int, char**)’: src/dummy.cpp:26:17: error: invalid initialization of non-const reference of type ‘std::string& {aka std::basic_string<char>&}’ from an rvalue of type ‘<brace-enclosed initializer list>’ make: *** [src/dummy.o] Error 1
- Code1 dovrebbe essere ok, secondo i libri. Sezione 7.7.2 dal momento che var è un lvalue, ma perché il codice 1 non funziona ma codice3 funziona nella mia situazione?
Sembra un bug in GCC (incluso 4.8), Clang accetta la versione 1 bene. –
Si è imbattuto in [DR1288] (http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_defects.html#1288). Si spera che i compilatori più recenti implementeranno la risoluzione proposta anziché il difetto standardizzato. – dyp