16 template <
typename V1,
typename V2,
17 typename Enable =
void>
24 template <
typename V1,
typename V2>
31 template <
typename V1,
typename V2>
42 template <
typename ValueSet>
51 template <
typename ValueSet1,
typename ValueSet2>
53 join(ValueSet1 vs1, ValueSet2 vs2)
68 template <
typename ValueSet1,
typename ValueSet2,
typename ValueSet3,
71 join(ValueSet1 vs1, ValueSet2 vs2, ValueSet3 vs3, VSs&&... vs)
73 return join(
join(vs1, vs2), vs3, std::forward<VSs>(vs)...);
77 template <
typename... ValueSets>
78 using join_t = decltype(
join(std::declval<ValueSets>()...));
84 #define VCSN_JOIN_SIMPLE(Lhs, Rhs) \
87 struct join_impl<Lhs, Rhs> \
90 static type join(Lhs, Rhs) \
std::string type(const automaton &a)
The implementation type of a.
auto join(const ValueSet &vs) -> ValueSet
The join of a single valueset.
A structure that implements the computation of join(V1, V2).
decltype(join(std::declval< ValueSets >()...)) join_t
The type of the join of the ValueSets.
auto join(ValueSet1 vs1, ValueSet2 vs2, ValueSet3 vs3, VSs &&...vs)
The join of three (or more) valuesets.
join_impl< V1, V2 >::type join_(V1 v1, V2 v2, int)
Dealing with commutativity: two implementations of join_: forward and reversed, ordered by preference...