3 #include <initializer_list>
10 #include <boost/optional.hpp>
77 template <
typename... Args>
82 return {sname<Args>()...};
109 template <
typename T>
113 #define DEFINE(...) \
115 struct snamer<__VA_ARGS__> \
117 static symbol name() \
119 auto res = symbol{#__VA_ARGS__}; \
125 struct vnamer<__VA_ARGS__> \
127 static symbol name(__VA_ARGS__&) \
129 auto res = symbol{#__VA_ARGS__}; \
158 template <
typename T, T Value>
163 symbol res(
"std::integral_constant<unsigned, "
169 template <
typename T, T Value>
172 using type = std::integral_constant<T, Value>;
175 return sname<type>();
220 template <
typename Dyn>
223 using type =
const std::vector<Dyn>;
227 for (
const auto& a: t)
233 return symbol{
"std::tuple<" + names +
'>'};
280 template <
typename... Args>
283 template <
typename T1>
289 template <
typename T1,
typename T2,
typename... Ts>
292 return sname<T1>() +
", " + name<T2, Ts...>();
297 return symbol{
"std::tuple<" +
name<Args...>() +
'>'};
307 template <
typename... Args>
312 return {
vname(std::forward<Args>(args))...};
The vname of a vector of dyn:: objects (e.g., automaton, expression, ...) is the tuple of their vname...
signature vsignature(Args &&...args)
The signature of (Args...).
static std::string name()
ValueSet::value_t tuple(const ValueSet &vs, const typename ValueSets::value_t &...v)
static symbol name(integral_constant t)
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
const std::vector< dyn::label > type
signature ssignature()
Static signature.
An expressionset can implement several different sets of identities on expressions.
A simple placeholder for integral constants.
static std::string name()
static symbol name(const type &t)
std::integral_constant< T, Value > type
std::string to_string(identities i)
Wrapper around operator<<.
Request the set implementation (bool weights).
Signature of a function call.