Я не розумію одного конкретного вживання двокрапки.
Я знайшов це в книзі Мова програмування на C ++ Б'ярна Струструпа, 4-е видання, розділ 11.4.4 "Дзвінки та повернення", стор. 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
}
Заплутана двокрапка відображається у рядку 7 у виписці return 1 : 2. Я поняття не маю, що це може бути. Це не етикетка чи потрійний оператор.
Здається, що це умовний термінальний оператор без першого члена (і без ?), але в такому випадку я не розумію, як це могло б працювати без умови.