correct templating of static variant

This commit is contained in:
John Jones 2018-08-10 14:40:47 -05:00
parent 1a457caf33
commit 48901cd1a4

View file

@ -382,5 +382,46 @@ public:
s.visit( to_static_variant(ar[1], max_depth - 1) );
}
template<typename... T> struct get_typename { static const char* name() { return typeid(static_variant<T...>).name(); } };
template< typename... T > struct get_comma_separated_typenames;
template<>
struct get_comma_separated_typenames<>
{
static const char* names() { return ""; }
};
template< typename T >
struct get_comma_separated_typenames<T>
{
static const char* names()
{
static const std::string n = get_typename<T>::name();
return n.c_str();
}
};
template< typename T, typename... Ts >
struct get_comma_separated_typenames<T, Ts...>
{
static const char* names()
{
static const std::string n =
std::string( get_typename<T>::name() )+","+
std::string( get_comma_separated_typenames< Ts... >::names() );
return n.c_str();
}
};
template< typename... T >
struct get_typename< static_variant< T... > >
{
static const char* name()
{
static const std::string n = std::string( "fc::static_variant<" )
+ get_comma_separated_typenames<T...>::names()
+ ">";
return n.c_str();
}
};
} // namespace fc