3 #include <initializer_list>
10 #include <boost/optional.hpp>
79 template <
typename... Args>
84 return {sname<Args>()...};
100 template <
typename T>
111 template <
typename T>
115 #define DEFINE(...) \
117 struct snamer<__VA_ARGS__> \
119 static symbol name() \
121 auto res = symbol{#__VA_ARGS__}; \
127 struct vnamer<__VA_ARGS__> \
129 static symbol name(__VA_ARGS__&) \
131 auto res = symbol{#__VA_ARGS__}; \
160 template <
typename T, T Value>
165 symbol res(
"std::integral_constant<unsigned, "
171 template <
typename T, T Value>
174 using type = std::integral_constant<T, Value>;
177 return sname<type>();
222 template <
typename Dyn>
225 using type =
const std::vector<Dyn>;
229 for (
const auto& a: t)
235 return symbol{
"std::tuple<" + names +
'>'};
258 template <
typename... Args>
261 template <
typename T1>
267 template <
typename T1,
typename T2,
typename... Ts>
270 return sname<T1>() +
", " + name<T2, Ts...>();
275 return symbol{
"std::tuple<" +
name<Args...>() +
'>'};
285 template <
typename... Args>
290 return {
vname(std::forward<Args>(args))...};
ValueSet::value_t tuple(const ValueSet &vs, const typename ValueSets::value_t &...v)
static std::string name()
An expressionset can implement several different sets of identities on expressions.
Request the set implementation (bool weights).
A simple placeholder for integral constants.
const std::vector< dyn::automaton > type
The vname of a vector of dyn:: objects (e.g., automaton, expression, ...) is the tuple of their vname...
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
signature vsignature(Args &&...args)
The signature of (Args...).
static std::string name()
std::integral_constant< T, Value > type
std::string to_string(identities i)
Wrapper around operator<<.
static symbol name(integral_constant t)
static symbol name(const type &t)
signature ssignature()
Static signature.
Signature of a function call.