This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/53856] New: Default argument allowed on member defined outside of class template
- From: "redi at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 04 Jul 2012 16:39:02 +0000
- Subject: [Bug c++/53856] New: Default argument allowed on member defined outside of class template
- Auto-submitted: auto-generated
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.