@@ -480,6 +480,63 @@ TEST(PrimitiveTraitsTest, LegacyPrimitiveTraitsNamespaceAliasesRemainAvailable)
480480 SUCCEED ();
481481}
482482
483+ TEST (PrimitiveTraitsTest, MetaTraitsExposeValueTypeAndPrimitiveMetadata) {
484+ using value_t = mcpplibs::primitives::primitive<
485+ short , mcpplibs::primitives::policy::value::checked,
486+ mcpplibs::primitives::policy::type::compatible,
487+ mcpplibs::primitives::policy::error::expected,
488+ mcpplibs::primitives::policy::concurrency::fenced>;
489+ using traits_t = mcpplibs::primitives::meta::traits<value_t const &>;
490+
491+ static_assert (
492+ std::same_as<typename traits_t ::value_type, typename value_t ::value_type>);
493+ static_assert (std::same_as<typename traits_t ::policies, typename value_t ::policies>);
494+ static_assert (std::same_as<typename traits_t ::value_policy,
495+ mcpplibs::primitives::policy::value::checked>);
496+ static_assert (std::same_as<typename traits_t ::type_policy,
497+ mcpplibs::primitives::policy::type::compatible>);
498+ static_assert (std::same_as<typename traits_t ::error_policy,
499+ mcpplibs::primitives::policy::error::expected>);
500+ static_assert (std::same_as<typename traits_t ::concurrency_policy,
501+ mcpplibs::primitives::policy::concurrency::fenced>);
502+
503+ SUCCEED ();
504+ }
505+
506+ TEST (PrimitiveTraitsTest, MetaPrimitiveConceptsMatchUnderlyingCategory) {
507+ using boolean_t = mcpplibs::primitives::primitive<bool >;
508+ using character_t = mcpplibs::primitives::primitive<char >;
509+ using integer_t = mcpplibs::primitives::primitive<int >;
510+ using floating_t = mcpplibs::primitives::primitive<double >;
511+
512+ static_assert (mcpplibs::primitives::meta::primitive_type<boolean_t const &>);
513+ static_assert (mcpplibs::primitives::meta::primitive_type<integer_t >);
514+ static_assert (!mcpplibs::primitives::meta::primitive_type<int >);
515+
516+ static_assert (mcpplibs::primitives::meta::boolean<boolean_t >);
517+ static_assert (!mcpplibs::primitives::meta::boolean<integer_t >);
518+
519+ static_assert (mcpplibs::primitives::meta::character<character_t >);
520+ static_assert (!mcpplibs::primitives::meta::character<boolean_t >);
521+
522+ static_assert (mcpplibs::primitives::meta::integer<integer_t >);
523+ static_assert (!mcpplibs::primitives::meta::integer<character_t >);
524+
525+ static_assert (mcpplibs::primitives::meta::floating<floating_t >);
526+ static_assert (!mcpplibs::primitives::meta::floating<integer_t >);
527+
528+ static_assert (mcpplibs::primitives::meta::numeric<integer_t >);
529+ static_assert (mcpplibs::primitives::meta::numeric<floating_t >);
530+ static_assert (!mcpplibs::primitives::meta::numeric<boolean_t >);
531+ static_assert (!mcpplibs::primitives::meta::numeric<character_t >);
532+ static_assert (!mcpplibs::primitives::meta::numeric<int >);
533+
534+ EXPECT_TRUE ((mcpplibs::primitives::meta::boolean<boolean_t >));
535+ EXPECT_TRUE ((mcpplibs::primitives::meta::character<character_t >));
536+ EXPECT_TRUE ((mcpplibs::primitives::meta::integer<integer_t >));
537+ EXPECT_TRUE ((mcpplibs::primitives::meta::floating<floating_t >));
538+ }
539+
483540TEST (PrimitiveTraitsTest,
484541 UnderlyingTypeRequiresValidRepTypeAndCategoryConsistency) {
485542 EXPECT_TRUE ((mcpplibs::primitives::underlying::traits<BadRep>::enabled));
0 commit comments