Introduce hybrid utilities for homogeneous and heterogeneous containers
These utilities are hybrid in the sense that they work
- classical and heterogeneous containers
- dynamical intergers and
integral_constant
s
As a rule of thumb, size and indices are encoded as integral_constant if possible. This allows to write code like
forEach(integralRange(size(v)), [&](auto i){
elementAt(v, i) = i+1;
});
which will e.g. work for std::vector
, Dune::BlockVector
but also std::tuple
and Dune::MultiTypeBlockVector
.
Another feature is ifElse
which provides a hybrid conditional.
If passed std::true_type
or std::false_type
instead of bool
this emulates a static_if
.