17template <
template <
typename...>
typename Template,
typename T>
18struct IsInstantiationOf : std::false_type {};
20template <
template <
typename...>
typename Template,
typename... Args>
21struct IsInstantiationOf<Template, Template<Args...>> : std::true_type {};
33template <
template <
typename...>
typename Trait,
typename... Args>
34concept IsDetected =
requires {
typename Trait<Args...>; };
39template <
typename T,
template <
typename...>
typename Template>
40concept IsInstantiationOf = impl::IsInstantiationOf<Template, T>::value;
43template <
typename T,
template <
typename...>
typename Template>
44concept IsCvInstantiationOf = IsInstantiationOf<std::remove_cv_t<T>, Template>;
50 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>;
55concept IsInteger = std::is_integral_v<T> && !IsCharacter<T> && !std::is_same_v<T,
bool>;
59template <
template <
typename...>
typename Template,
typename T>
61concept kIsInstantiationOf = IsInstantiationOf<T, Template>;
65template <
template <
typename...>
typename Template,
typename T>
67concept kIsCvInstantiationOf = IsCvInstantiationOf<T, Template>;
74concept kIsInteger = IsInteger<T>;