}
template <typename T>
-std::string type_of_g_variant()
+constexpr static std::string concat_gvariant_types ()
{
- return std::string("(") + type_of_g_variant_one<T>() + ')';
+ return std::string (1, type_of_g_variant_one<T> ());
}
-template <typename T, typename T1, typename... Ts>
-std::string type_of_g_variant()
+template <typename T1, typename T2, typename ... Ts>
+constexpr static std::string concat_gvariant_types ()
{
- auto ret = type_of_g_variant<T1, Ts...>();
- ret[0] = type_of_g_variant_one<T>();
- ret.insert(0, "(");
- return ret;
+ return std::string (1, type_of_g_variant_one <T1> ()) + concat_gvariant_types <T2, Ts ...> ();
}
+template <typename ... Ts>
+constexpr std::string type_of_g_variant ()
+{
+ return std::string ("(") + concat_gvariant_types <Ts ...> () + ")";
+}
+
+
template <size_t I, typename T>
std::tuple<T> tuple_from_g_variant_inner(GVariant *variant)
{