// { dg-additional-options "-fmodules-ts -std=c++20" } export module M; // { dg-module-cmi M } export template <typename T0> struct traits { static constexpr int variant = 0; }; // #2 template <typename T2> requires requires { typename T2::element_type; } struct traits<T2 *> { using type = typename T2::element_type; static constexpr int variant = 2; }; // #1 template <typename T1> struct traits<T1 *> { using type = T1; static constexpr int variant = 1; }; // #3 template <typename T3> requires requires { typename T3::value_type; } struct traits<T3 *> { using type = typename T3::value_type; static constexpr int variant = 3; };