5#include <rapidfuzz/details/types.hpp>
14auto inner_type(T
const*) -> T;
17auto inner_type(T
const&) ->
typename T::value_type;
21using char_type =
decltype(detail::inner_type(std::declval<T const&>()));
28using iter_value_t =
typename std::iterator_traits<T>::value_type;
32template <
typename From,
typename To>
33struct is_explicitly_convertible {
37 template <
typename F,
typename T>
38 static constexpr auto test(
int ) ->
decltype(f(
static_cast<T
>(std::declval<F>())),
true)
43 template <
typename F,
typename T>
44 static constexpr auto test(...) ->
bool
49 static bool const value = test<From, To>(0);
52template <
bool B,
class T =
void>
53using rf_enable_if_t =
typename std::enable_if<B, T>::type;