Ответ 1
<:
и :>
являются орграфами. Они переводятся на [
и ]
соответственно. Таким образом, ваш код эквивалентен:
auto a = [&] { };
do_it([&] { std::cout << "Hello" << std::endl; });
Так что это просто лямбда, которая захватывает все по ссылке.
Чтобы объявить лямбду, которая принимает такой аргумент, просто добавьте список параметров после группы захвата:
auto a = <:&:> (AType) { };
Если вы хотите, чтобы кто-либо читал ваш код, чтобы вас ненавидеть, вы можете использовать сочетание орграфов и триграфов, где это возможно:
auto a = <:&??)??<%>;
// ^ same as [&]{}