Vcsn
2.3
Be Rational
|
#include <istream>
#include <vcsn/misc/stream.hh>
#include <vcsn/misc/symbol.hh>
#include <vcsn/misc/type_traits.hh>
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_expressions |
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... | |
#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 expressionset::atom and expressionset::atom_ for an example.
It is very tempting to turn 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)".