https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102033

            Bug ID: 102033
           Summary: template function signature incorrectly drops
                    top-level cv-qualifiers causing template
                    specialization failing to match
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nickhuang99 at hotmail dot com
  Target Milestone: ---

The following snippet code fails with similar reason as PR101402, but it cannot
be fixed with similar way of using *resolve_typename_type* without further
improvement of itself.

template<class TA>
struct A{
        template<class TB>
        using Type=TB[3];
};
template<class TA, class TB>
void f(const typename A<TA>::template Type<TB>){}
template <>
void f<int, char>(const typename A<int>::template Type<char>){}


error: template-id 'f<int, char>' for 'void f(const char*)' does not match any
template declaration
    9 | void f<int, char>(const typename A<int>::template Type<char>){}
      |      ^~~~~~~~~~~~
array-using.cpp:7:6: note: candidate is: 'template<class TA, class TB> void
f(typename A<TA>::Type<TB>)'
    7 | void f(const typename A<TA>::template Type<TB>){}
      |      ^

Reply via email to