P
Pavel
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 is below:
--------cut here ---------
#include <iostream>
using namespace std;
class S {
private:
template <typename T>
struct I
{
const static T i;
};
};
template <>
const int S::I<int>::i = 5;
class S0 {
private:
struct I {
const static 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
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 is below:
--------cut here ---------
#include <iostream>
using namespace std;
class S {
private:
template <typename T>
struct I
{
const static T i;
};
};
template <>
const int S::I<int>::i = 5;
class S0 {
private:
struct I {
const static 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