1 #ifndef VCSN_CORE_JOIN_HH
2 # define VCSN_CORE_JOIN_HH
17 template <
typename V1,
typename V2,
18 typename Enable =
void>
25 template <
typename V1,
typename V2>
32 template <
typename V1,
typename V2>
33 typename join_impl<V1, V2>::type
42 template <
typename ValueSet>
51 template <
typename ValueSet1,
typename ValueSet2,
typename... VSs>
53 join(
const ValueSet1& vs1,
const ValueSet2& vs2,
const VSs&... vs)
60 template <
typename... ValueSets>
61 using join_t = decltype(
join(std::declval<ValueSets>()...));
67 #define VCSN_JOIN_SIMPLE(Lhs, Rhs) \
70 struct join_impl<Lhs, Rhs> \
73 static type join(Lhs, Rhs) \
80 #endif // !VCSN_CORE_JOIN_HH
decltype(join(std::declval< ValueSets >()...)) join_t
The type of the join of the ValueSets.
auto join(const ValueSet1 &vs1, const ValueSet2 &vs2, const VSs &...vs) -> decltype(join(detail::join_(vs1, vs2, 0), vs...))
The join of two (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...
A structure that implements the computation of join(V1, V2).
auto join(const ValueSet &vs) -> ValueSet
The join of a single valueset.