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>();
223 using type =
const std::vector<dyn::expression>;
227 for (
const auto& a: t)
233 return symbol{
"std::tuple<" + names +
'>'};
242 using type =
const std::vector<dyn::automaton>;
246 for (
const auto& a: t)
252 return symbol{
"std::tuple<" + names +
'>'};
257 template <
typename... Args>
260 template <
typename T1>
266 template <
typename T1,
typename T2,
typename... Ts>
269 return sname<T1>() +
", " + name<T2, Ts...>();
274 return symbol{
"std::tuple<" +
name<Args...>() +
'>'};
284 template <
typename... Args>
289 return {
vname(std::forward<Args>(args))...};
const std::vector< dyn::automaton > type
std::string to_string(identities i)
Wrapper around operator<<.
static std::string name()
static symbol name(const type &t)
A simple placeholder for integral constants.
ValueSet::value_t tuple(const ValueSet &vs, const typename ValueSets::value_t &...v)
std::integral_constant< T, Value > type
signature ssignature()
Static signature.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
An expressionset can implement several different sets of identities on expressions.
static symbol name(const type &t)
Signature of a function call.
static std::string name()
signature vsignature(Args &&...args)
The signature of (Args...).
const std::vector< dyn::expression > type
static symbol name(integral_constant t)