https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69906
Bug ID: 69906
Summary: Feature request: better error message when dependent
function template parsing fails
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: steve.lorimer at gmail dot com
Target Milestone: ---
When a dependent type is specified without the `typename` keyword, the error
message generated alludes to this fact:
main.cpp: In function ‘void bar(T&)’:
main.cpp:13:5: error: need ‘typename’ before ‘T:: type’ because ‘T’ is
a dependent scope
T::type i = 0;
^
However, if a dependent function template is specified without the `template`
keyword, the error message doesn't allude to the missing `template` keyword:
main.cpp:10:15: error: expected primary-expression before ‘int’
type.func<int>();
^
The feature request is to extend this helpful `typename` keyword error message
to the case where the missing keyword is `template`.
Example:
struct Foo
{
template<typename T>
void func() {}
};
template<typename T>
void bar(T& type)
{
type.func<int>();
}
int main()
{
Foo foo;
bar(foo);
}
Error:
main.cpp:10:15: error: expected primary-expression before ‘int’
type.func<int>();
^
main.cpp:10:15: error: expected ‘;’ before ‘int’
The fix is to use the `template` keyword:
template<typename T>
void bar(T& type)
{
type.template func<int>();
}
Suggested error:
main.cpp: In function ‘void bar(T&)’:
main.cpp:13:10: error: need ‘template’ before ‘func’ because ‘T’ is a
dependent scope
type.func<int>();
^