[Bug c++/96321] New: GCC accepts conversion-function-id after the keyword template
language.lawyer at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Jul 26 05:52:49 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96321
Bug ID: 96321
Summary: GCC accepts conversion-function-id after the keyword
template
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Keywords: accepts-invalid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: language.lawyer at gmail dot com
Target Milestone: ---
struct S
{
template<typename T>
operator T() { return T(); }
};
int i = S().template operator int();
The code is accepted by GCC, when it shouldn't be.
C++11 [temp.names]/5: A name prefixed by the keyword `template` shall be a
template-id or the name shall refer to a class template.
template-id:
simple-template-id
operator-function-id < template-argument-list[opt] >
literal-operator-id < template-argument-list[opt] >
So, conversion-function-id is not a template-id.
Code is also probably invalid in C++98/03. C++03 [temp.names]/5 says: If a name
prefixed by the keyword `template` is not the name of a member template, the
program is ill-formed.
More information about the Gcc-bugs
mailing list