@@ -245,21 +245,32 @@ TEST_CASE("non-structural types", "[type_traits]") {
245245 STATIC_REQUIRE (not stdx::is_structural_v<non_structural::S>);
246246}
247247
248- #if __cplusplus >= 202002L
249248namespace {
250249template <typename ...> struct long_type_name {};
250+ using A = long_type_name<int , int , int , int , int , int , int , int >;
251+ using B = long_type_name<A, A, A, A, A, A, A, A>;
252+ using C = long_type_name<B, B, B, B, B, B, B, B>;
251253} // namespace
252254
253- TEST_CASE (" type shrinkage" , " [type_traits]" ) {
254- using A = long_type_name<int , int , int , int , int , int , int , int >;
255- using B = long_type_name<A, A, A, A, A, A, A, A>;
256- using C = long_type_name<B, B, B, B, B, B, B, B>;
255+ TEST_CASE (" type shrinkage (by type)" , " [type_traits]" ) {
257256 using X = stdx::shrink_t <C>;
257+ #if __cplusplus >= 202002L
258258 STATIC_CHECK (stdx::type_as_string<X>().size () <
259259 stdx::type_as_string<C>().size ());
260- STATIC_CHECK (std::same_as<stdx::expand_t <X>, C>);
260+ #endif
261+ STATIC_CHECK (std::is_same_v<stdx::expand_t <X>, C>);
261262}
263+
264+ TEST_CASE (" type shrinkage (by value)" , " [type_traits]" ) {
265+ auto c = C{};
266+ auto x = stdx::shrink (c);
267+ auto y = stdx::expand (x);
268+ #if __cplusplus >= 202002L
269+ STATIC_CHECK (stdx::type_as_string<decltype (x)>().size () <
270+ stdx::type_as_string<C>().size ());
262271#endif
272+ STATIC_CHECK (std::is_same_v<decltype (y), C>);
273+ }
263274
264275TEST_CASE (" nth type in pack" , " [type_traits]" ) {
265276 STATIC_REQUIRE (
0 commit comments