13 using base_t = std::remove_cv_t<std::remove_reference_t<T>>;
29 #define DEFINE(Type) \
32 template <typename ValueSet, typename = void_t<>> \
33 struct Type ## _of_impl; \
35 template <typename ValueSet> \
36 struct Type ## _of_impl<ValueSet, \
37 void_t<typename ValueSet::Type>> \
39 using type = typename ValueSet::Type; \
42 template <typename ValueSet> \
43 struct Type ## _of_impl<std::shared_ptr<ValueSet>, \
44 void_t<typename ValueSet::Type>> \
46 using type = typename ValueSet::Type; \
49 template <typename ValueSet> \
50 struct Type ## _of_impl<ValueSet*, \
51 void_t<typename ValueSet::Type>> \
53 using type = typename ValueSet::Type; \
57 template <typename ValueSet> \
59 = typename detail::Type ## _of_impl<base_t<ValueSet>>::type
80 template <
typename Aut,
typename Context = context_t_of<Aut>>
82 =
typename Aut::element_type::template fresh_automaton_t<Context>;
84 template <
typename ValueSet>
88 template <
typename ValueSet>
93 template <
typename LS1,
typename LS2>
97 template <
typename LS1,
typename LS2,
typename LS3>
103 template <
typename Ctx1,
typename Ctx2>
Whether two labelsets are composable.
typename labelset_t_of< base_t< ValueSet >>::word_t word_t_of
#define DEFINE(Type)
Extract various ValueSets/Value types from objects, or pointers to objects.
typename detail::labelset_t_of_impl< base_t< ValueSet >>::type labelset_t_of
typename Aut::element_type::template fresh_automaton_t< Context > fresh_automaton_t_of
Given an automaton type, the type of its copies.
std::remove_cv_t< std::remove_reference_t< T >> base_t
T without reference or const/volatile qualifiers.
typename labelset_t_of< base_t< ValueSet >>::letter_t letter_t_of
Whether two contexts are composable.
Provide a variadic mul on top of a binary mul(), and one().