Vcsn  2.0
Be Rational
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
kind.hh File Reference
#include <istream>
#include <stdexcept>
#include <type_traits>
#include <vcsn/misc/escape.hh>
Include dependency graph for kind.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  vcsn::labels_are_letters
 
struct  vcsn::is_lal< Kinded >
 
struct  vcsn::labels_are_nullable
 
struct  vcsn::is_lan< Kinded >
 
struct  vcsn::labels_are_one
 
struct  vcsn::is_lao< Kinded >
 
struct  vcsn::labels_are_ratexps
 
struct  vcsn::is_lar< Kinded >
 
struct  vcsn::labels_are_tuples
 
struct  vcsn::is_lat< Kinded >
 
struct  vcsn::labels_are_words
 
struct  vcsn::is_law< Kinded >
 

Namespaces

 vcsn
 

Macros

#define DEFINE(Abbrev, Name)
 Define the kinds, and auxiliary tools. More...
 

Typedefs

template<typename Kinded , typename R = Kinded>
using vcsn::if_lal = typename std::enable_if< is_lal< Kinded >::value, R >::type
 
template<typename Kinded , typename R = Kinded>
using vcsn::if_lan = typename std::enable_if< is_lan< Kinded >::value, R >::type
 
template<typename Kinded , typename R = Kinded>
using vcsn::if_lao = typename std::enable_if< is_lao< Kinded >::value, R >::type
 
template<typename Kinded , typename R = Kinded>
using vcsn::if_lar = typename std::enable_if< is_lar< Kinded >::value, R >::type
 
template<typename Kinded , typename R = Kinded>
using vcsn::if_lat = typename std::enable_if< is_lat< Kinded >::value, R >::type
 
template<typename Kinded , typename R = Kinded>
using vcsn::if_law = typename std::enable_if< is_law< Kinded >::value, R >::type
 

Macro Definition Documentation

#define DEFINE (   Abbrev,
  Name 
)

Define the kinds, and auxiliary tools.

is_ABBREV<Kinded>: Whether Kinded has a specific kind_t

if_ABBREV<Kinded, R = Kinded>: Provide "overloading" on parameter types, for instance to require letter_t when labels_are_letters, and word_t when labels_are_words. See ratexpset::atom and ratexpset::atom_ for an example.

It is very tempting to turns these guys into members of context, but then, instead of "(if_lal<Ctx, letter_t> v)", one must write "(typename Cxx::template if_lal<letter_t> v)".

Definition at line 27 of file kind.hh.