Non capisco un uso particolare dei due punti.
L'ho trovato nel libro Il linguaggio di programmazione C ++ di Bjarne Stroustrup, 4a edizione, sezione 11.4.4 "Chiama e ritorna", pagina 297:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
I due punti confusi appaiono nella riga 7, nell'istruzione return 1 : 2
. Non ho idea di cosa potrebbe essere. Non è un'etichetta o un operatore ternario.
Sembra un operatore ternario condizionale senza il primo membro (e senza il ?
), ma in quel caso non capisco come possa funzionare senza una condizione.