11module ;
22#include < tuple>
3+ #include < type_traits>
34
45export module mcpplibs.primitives.primitive.traits;
56
@@ -9,6 +10,26 @@ import mcpplibs.primitives.policy.impl;
910import mcpplibs.primitives.policy.utility;
1011import mcpplibs.primitives.underlying.traits;
1112
13+ namespace mcpplibs ::primitives::meta::details {
14+
15+ template <typename T> struct primitive_traits_impl ;
16+
17+ template <underlying_type T, policy::policy_type... Policies>
18+ struct primitive_traits_impl <primitive<T, Policies...>> {
19+ using value_type = T;
20+ using policies = std::tuple<Policies...>;
21+ using value_policy =
22+ policy::resolve_policy_t <policy::category::value, Policies...>;
23+ using type_policy =
24+ policy::resolve_policy_t <policy::category::type, Policies...>;
25+ using error_policy =
26+ policy::resolve_policy_t <policy::category::error, Policies...>;
27+ using concurrency_policy =
28+ policy::resolve_policy_t <policy::category::concurrency, Policies...>;
29+ };
30+
31+ } // namespace mcpplibs::primitives::meta::details
32+
1233// Public API exported from this module.
1334export namespace mcpplibs ::primitives::meta {
1435using policy_category = policy::category;
@@ -27,21 +48,8 @@ using default_policies =
2748 std::tuple<policy::defaults::value, policy::defaults::type,
2849 policy::defaults::error, policy::defaults::concurrency>;
2950
30- template <typename T> struct traits ;
31-
32- template <underlying_type T, policy::policy_type... Policies>
33- struct traits <primitive<T, Policies...>> {
34- using value_type = T;
35- using policies = std::tuple<Policies...>;
36- using value_policy =
37- policy::resolve_policy_t <policy::category::value, Policies...>;
38- using type_policy =
39- policy::resolve_policy_t <policy::category::type, Policies...>;
40- using error_policy =
41- policy::resolve_policy_t <policy::category::error, Policies...>;
42- using concurrency_policy =
43- policy::resolve_policy_t <policy::category::concurrency, Policies...>;
44- };
51+ template <typename T>
52+ using traits = details::primitive_traits_impl<std::remove_cvref_t <T>>;
4553
4654} // namespace mcpplibs::primitives::meta
4755
0 commit comments