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>){}
| ^