12 using base_t = std::remove_cv_t<std::remove_reference_t<T>>;
28 #define DEFINE(Type) \
31 template <typename ValueSet, typename = void_t<>> \
32 struct Type ## _of_impl; \
34 template <typename ValueSet> \
35 struct Type ## _of_impl<ValueSet, \
36 void_t<typename ValueSet::Type>> \
38 using type = typename ValueSet::Type; \
41 template <typename ValueSet> \
42 struct Type ## _of_impl<std::shared_ptr<ValueSet>, \
43 void_t<typename ValueSet::Type>> \
45 using type = typename ValueSet::Type; \
49 template <typename ValueSet> \
51 = typename detail::Type ## _of_impl<base_t<ValueSet>>::type
72 template <
typename Aut,
typename Context = context_t_of<Aut>>
74 =
typename Aut::element_type::template fresh_automaton_t<Context>;
76 template <
typename ValueSet>
80 template <
typename ValueSet>
#define DEFINE(Type)
Extract various ValueSets/Value types from objects, or pointers to objects.
std::remove_cv_t< std::remove_reference_t< T >> base_t
T without reference or const/volatile qualifiers.
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.
typename labelset_t_of< base_t< ValueSet >>::word_t word_t_of
typename labelset_t_of< base_t< ValueSet >>::letter_t letter_t_of