https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105797
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- // PR c++/105797 namespace std { template <int __v> struct integral_constant { static constexpr int value = __v; }; template <typename _Tp> struct decay { typedef _Tp type; }; template <typename _Tp> using decay_t = typename decay<_Tp>::type; template <typename> constexpr bool is_integral_v = integral_constant<true>::value; template <typename _Tp> concept integral = is_integral_v<_Tp>; } // namespace std template <typename> struct AStruct { using value_type = int; }; template <typename T_> void fc1(AStruct<T_> v) requires std::integral<typename std::decay_t<decltype(v)>::value_type>; template <typename T1_, typename T2_> void fc2(AStruct<T1_> v1, T2_) requires std::integral<typename std::decay_t<decltype(v1)>::value_type>; AStruct<int> test_v1, test2_v; int test_v2; void test() { fc2(test_v1, test_v2); } void test2() { fc1(test2_v); }