17     template <
typename ExpSet>
    19       : 
public ExpSet::const_visitor
    29       using super_t = 
typename expressionset_t::const_visitor;
    30       using node_t = 
typename super_t::node_t;
    31       using inner_t = 
typename super_t::inner_t;
    32       template <rat::exp::type_t Type>
    34       template <rat::exp::type_t Type>
    36       template <rat::exp::type_t Type>
    51             auto lhss = int(size<ExpSet>(lhs));
    52             auto rhss = int(size<ExpSet>(rhs));
    54             if (
auto res = lhss - rhss)
    56             else if (
auto res = 
int(lhs->type()) - 
int(rhs->type()))
    72 #define DEFINE(Type)                                                    \    73       VCSN_RAT_VISIT(Type, lhs)                                         \    75         res_ = cmp_(lhs, *down_pointer_cast<const Type ## _t>(rhs_));   \    96       using tuple_t = 
typename super_t::tuple_t;
    98       template <
typename = 
void>
   101         using tupleset_t = 
typename expressionset_t::template as_tupleset_t<>;
   106                             *down_pointer_cast<const tuple_t>(
self_.
rhs_));
   120         detail::static_if<context_t::is_lat>
   132       int cmp_(
const zero_t&, 
const zero_t&)
   142       int cmp_(
const atom_t& lhs, 
const atom_t& rhs)
   147       int cmp_(
const name_t& lhs, 
const name_t& rhs)
   149         if (
auto res = (*
this)(lhs.sub(), rhs.sub()))
   152           return lhs.name_get().get().compare(rhs.name_get());
   155       template <rat::exp::type_t Type>
   156       int cmp_(
const variadic_t<Type>& lhs, 
const variadic_t<Type>& rhs)
   158         if (
auto res = 
int(lhs.size()) - 
int(rhs.size()))
   165       template <rat::exp::type_t Type>
   166       int cmp_(
const unary_t<Type>& lhs, 
const unary_t<Type>& rhs)
   168         return (*
this)(lhs.sub(), rhs.sub());
   171       template <rat::exp::type_t Type>
   172       int cmp_(
const weight_node_t<Type>& lhs, 
const weight_node_t<Type>& rhs)
   175         if (
auto res = (*
this)(lhs.sub(), rhs.sub()))
 typename detail::weightset_t_of_impl< base_t< ValueSet > >::type weightset_t_of
int lexicographical_cmp(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, Compare comp)
Lexicographical three-way comparison between two ranges. 
weightset_t_of< context_t > weightset_t
int cmp_(const zero_t &, const zero_t &)
int operator()(expression_t lhs, expression_t rhs)
Whether lhs < rhs. 
An inner node with multiple children. 
void visit(const tuple_t &v, std::true_type) override
typename super_t::inner_t inner_t
typename super_t::template unary_t< Type > unary_t
An inner node to name the subexpression. 
typename detail::context_t_of_impl< base_t< ValueSet > >::type context_t_of
int operator()(const tuple_t &lhs, const tuple_t &rhs)
Binary operator(). 
decltype(std::declval< LabelSet >().one()) one_t
int cmp_(const weight_node_t< Type > &lhs, const weight_node_t< Type > &rhs)
weight_t_of< context_t > weight_t
int cmp_(const name_t &lhs, const name_t &rhs)
A functor for three-way comparison between two expressions. 
typename detail::labelset_t_of_impl< base_t< ValueSet > >::type labelset_t_of
typename expressionset_t::value_t expression_t
int operator()(const tuple_t &lhs)
Entry point: down_cast rhs_ and bounce to binary operator(). 
typename super_t::node_t node_t
context_t_of< expressionset_t > context_t
typename super_t::template weight_node_t< Type > weight_node_t
int cmp_(const one_t &, const one_t &)
int cmp_(const atom_t &lhs, const atom_t &rhs)
An inner node implementing a weight. 
int cmp_(const variadic_t< Type > &lhs, const variadic_t< Type > &rhs)
typename expressionset_t::const_visitor super_t
labelset_t_of< context_t > labelset_t
expression_t rhs_
The right-hand side expression with which the current node is compared. 
int res_
The current result. 
Functor to three-way comparison Values of ValueSets. 
typename super_t::template variadic_t< Type > variadic_t
int cmp_(const unary_t< Type > &lhs, const unary_t< Type > &rhs)
typename detail::weight_t_of_impl< base_t< ValueSet > >::type weight_t_of
int compare(const Lhs &lhs, const Rhs &rhs)
Comparison between lhs and rhs. 
typename expressionset_t::template as_tupleset_t<> tupleset_t
typename super_t::tuple_t tuple_t