11USERVER_NAMESPACE_BEGIN
17template <
typename Default,
template <
typename...>
typename Trait,
typename... Args>
22template <
typename Default,
template <
typename...>
typename Trait,
typename... Args>
23requires requires {
typename Trait<Args...>; }
24struct Detector<Default, Trait, Args...> {
25 using type = Trait<Args...>;
28template <
template <
typename...>
typename Template,
typename T>
29struct IsInstantiationOf : std::false_type {};
31template <
template <
typename...>
typename Template,
typename... Args>
32struct IsInstantiationOf<Template, Template<Args...>> : std::true_type {};
58template <
template <
typename...>
typename Trait,
typename... Args>
59concept IsDetected =
requires {
typename Trait<Args...>; };
64template <
template <
typename...>
typename Trait,
typename... Args>
65using DetectedType =
typename impl::Detector<NotDetected, Trait, Args...>::type;
70template <
typename Default,
template <
typename...>
typename Trait,
typename... Args>
71using DetectedOr =
typename impl::Detector<Default, Trait, Args...>::type;
74template <
typename T,
template <
typename...>
typename Template>
75concept IsInstantiationOf = impl::IsInstantiationOf<Template, T>::value;
78template <
typename T,
template <
typename...>
typename Template>
79concept IsCvInstantiationOf = IsInstantiationOf<std::remove_cv_t<T>, Template>;
85 std::is_same_v<T,
char> || std::is_same_v<T,
wchar_t> || std::is_same_v<T,
char16_t> || std::is_same_v<T,
char32_t>;
90concept IsInteger = std::is_integral_v<T> && !IsCharacter<T> && !std::is_same_v<T,
bool>;
94template <
template <
typename...>
typename Template,
typename T>
96concept kIsInstantiationOf = IsInstantiationOf<T, Template>;
100template <
template <
typename...>
typename Template,
typename T>
102concept kIsCvInstantiationOf = IsCvInstantiationOf<T, Template>;
109concept kIsInteger = IsInteger<T>;