Skip to content

Commit 78d3df1

Browse files
committed
Type: SpecializesValue
1 parent cd096db commit 78d3df1

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

modules/Type/Concept.mpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export module CppUtils.Type.Concept;
22

33
import std;
4+
export import CppUtils.Type.Specialization;
45

56
export namespace CppUtils::Type
67
{
@@ -22,15 +23,6 @@ export namespace CppUtils::Type
2223
{ std::hash<std::remove_cvref_t<T>>{}(a) } -> std::convertible_to<std::size_t>;
2324
};
2425

25-
template<class T, template<class...> class IncompleteType>
26-
inline constexpr auto isSpecializationOf = false;
27-
28-
template<template<class...> class IncompleteType, class... Args>
29-
inline constexpr auto isSpecializationOf<IncompleteType<Args...>, IncompleteType> = true;
30-
31-
template<class T, template<class...> class IncompleteType>
32-
concept Specializes = isSpecializationOf<std::remove_cvref_t<T>, IncompleteType>;
33-
3426
template<class T>
3527
concept Function = std::is_function_v<T>;
3628

modules/Type/Specialization.mpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
export module CppUtils.Type.Specialization;
2+
3+
import std;
4+
5+
export namespace CppUtils::Type
6+
{
7+
template<class T, template<class...> class>
8+
inline constexpr auto isSpecializationOfTypes = false;
9+
10+
template<template<class...> class IncompleteType, class... Args>
11+
inline constexpr auto isSpecializationOfTypes<IncompleteType<Args...>, IncompleteType> = true;
12+
13+
template<class T, template<class...> class IncompleteType>
14+
concept Specializes = isSpecializationOfTypes<std::remove_cvref_t<T>, IncompleteType>;
15+
16+
template<class T, template<auto...> class>
17+
inline constexpr auto isSpecializationOfValues = false;
18+
19+
template<template<auto...> class IncompleteType, auto... Args>
20+
inline constexpr auto isSpecializationOfValues<IncompleteType<Args...>, IncompleteType> = true;
21+
22+
template<class T, template<auto...> class IncompleteType>
23+
concept SpecializesValue = isSpecializationOfValues<std::remove_cvref_t<T>, IncompleteType>;
24+
}

0 commit comments

Comments
 (0)