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. 
 
#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 labelset_t_of< base_t< ValueSet >>::letter_t letter_t_of
 
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 >>::word_t word_t_of
 
typename Aut::element_type::template fresh_automaton_t< Context > fresh_automaton_t_of
Given an automaton type, the type of its copies. 
 
Whether two contexts are composable. 
 
Provide a variadic mul on top of a binary mul(), and one().