Again, uniform object initialisation should be supported - even the following is legal:

function<void (const TraitHelper&, int)> print_traits{[&print_traits, this](const TraitHelper& tr, int depth)}