[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Why internal struct template is accessible even if private?
From: |
Pavel |
Subject: |
Why internal struct template is accessible even if private? |
Date: |
Tue, 24 May 2011 19:59:18 -0000 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20101206 SeaMonkey/2.0.11 |
Hi,
I have seen that with the new compilers (last tried with g++ 4.4.5) nested
struct templates are accessible from outside even when declared in the "private"
section of a class but with older ones (like g++ 3.xx) they were not. I suspect
new compilers are right but cannot trace it to the Standard -- any hints if it
is the right behavior and how it follows from the Standard?
The code I tried is below (I tried with -std=ansi and -std=c++98).
Note: someone on comp.lang.c++ tested the code with Comeau C/C++ 4.3.10.1
(obviously after renaming it to ComeauTest.c) and received this error:
"ComeauTest.c", line 26: error: class template "S::I" (declared at line 7) is
inaccessible
cout<< "S::I<int>::i="<< S::I<int>::i<< endl; //why does this compile?
^
reported the code fails to compile
--------cut here ---------
#include<iostream>
using namespace std;
class S {
private:
template<typename T>
struct I
{
static const T i;
};
};
template<>
const int S::I<int>::i = 5;
class S0 {
private:
struct I {
static const int i;
};
};
const int S0::I::i = 6;
int main(int, char *[]) {
cout<< "S::I<int>::i="<< S::I<int>::i<< endl; // why does this compile?
// cout<< "S0::I::i="<< S0::I::i<< endl; // this would not not compile,
as expected, with this error msg (g++ 4.4.5):
// tic.cpp:18: error: ‘struct S0::I’ is private
// tic.cpp:28: error: within this context
return 0;
}
----------cut here------
Thanks in advance,
-Pavel
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Why internal struct template is accessible even if private?,
Pavel <=