[Bug c++/53856] New: Default argument allowed on member defined outside of class template
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jul 4 16:39:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53856
Bug #: 53856
Summary: Default argument allowed on member defined outside of
class template
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Keywords: accepts-invalid
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: redi@gcc.gnu.org
template<typename T>
struct A
{
struct B;
};
template<typename T = int>
struct A<T>::B
{
int i;
};
int main()
{
A<int>::B b = { };
return b.i;
}
This should be rejected according to [temp.param]/9
"A default template-argument shall not be specified in the
template-parameter-lists of the definition of a member of a class template that
appears outside of the member’s class."
All versions of G++ since at least 3.4 accept the code above.
Comeau online rejects it:
"ComeauTest.c", line 7: error: a default template argument cannot be specified
on
the declaration of a member of a class template outside of its class
template<typename T = int>
^
As does Clang++
bug2.cc:7:19: error: cannot add a default template argument to the definition
of a member of a class template
template<typename T = int>
^ ~~~
Solaris CC accepts it.
More information about the Gcc-bugs
mailing list