No entiendo un uso particular de un colon.
Lo encontré en el libro El lenguaje de programación C ++ de Bjarne Stroustrup, cuarta edición, sección 11.4.4 "Llamada y devolución", página 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
}
Los dos puntos confusos aparecen en la línea 7, en la declaración return 1 : 2. No tengo idea de lo que podría ser. No es una etiqueta ni un operador ternario.
Parece un operador ternario condicional sin el primer miembro (y sin el ?), pero en ese caso no entiendo cómo podría funcionar sin una condición.