This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/27339] New: defining out-of-class specialization of value template parameter with private type
- From: "dirkmoermans at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 27 Apr 2006 16:28:03 -0000
- Subject: [Bug c++/27339] New: defining out-of-class specialization of value template parameter with private type
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Following code does not compile with gcc 4.1.
It compiles with gcc 3.4.0 and gcc 4.0.2 and comeau online.
=============================
class A
{
private:
enum private_enum {a};
template<A::private_enum v> // OK
struct B
{
void bm();
};
public:
void am()
{
B<a> instance; //OK
instance.bm();
}
};
template<A::private_enum v> // FAIL
void
A::B<v>::bm(){}
=============================
The error message is:
a.cc:4: error: 'enum A::private_enum' is private
a.cc:19: error: within this context
If the member template function gets defined inline, the code compiles.
I don't have the c++ standard available, but a technicality like an
inline/outline definition should have no impact on the validity of the code
imho.
The same error occurrs if the enum gets replaced by a function template
typedef, or if the inner-class gets replaced by a member-function-template.
A related bug is 10849
--
Summary: defining out-of-class specialization of value template
parameter with private type
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: dirkmoermans at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27339