I am trying to understand this C syntax:
constexpr auto all_deps_type_set =
(... | TraitsOf(types::type_c<HaversackTs>).all_deps);
What does the (...|
part mean?
Example: https://github.com/google/hotels-template-library/blob/master/haversack/haversack_test_util.h
CodePudding user response:
HaversackTs
is a parameter pack, which means it contains some variable number of types given to the template. ...
expands a template parameter pack, using a given binary operator (in our case, the bitwise |
) to fold over it. So if, in a particular instantiation of this template, HaversackTs
happened to be int, std::string
, then that line would mean
constexpr auto all_deps_type_set =
(TraitsOf(types::type_c<int>).all_deps | TraitsOf(types::type_c<std::string>).all_deps);
The right-hand side is expanded separately for each type in the parameter pack, and the results are combined using |
. This generalizes naturally to more than two arguments by simply applying |
between each one.