25template <
typename T,
typename Enable =
void>
30template <
typename T,
typename =
void>
34struct IsConvertible<T, std::void_t<decltype(TypeConverter<T>{})>> : std::true_type {};
38template <typename T, typename = std::enable_if_t<IsConvertible<T>::value>>
45 TypeConverter<T>::fromNative(src, dst);
50template <typename T, typename = std::enable_if_t<IsConvertible<T>::value>>
51[[nodiscard]]
constexpr auto toNative(
const T& src) ->
typename TypeConverter<T>::NativeType {
52 using NativeType =
typename TypeConverter<T>::NativeType;
53 if constexpr (std::is_invocable_r_v<NativeType,
decltype(TypeConverter<T>::toNative), T>) {
54 return TypeConverter<T>::toNative(src);
57 TypeConverter<T>::toNative(src, dst);
Type conversion from and to native types.