下面的代码由于显而易见的原因不编译,即Foo试图访问Bar的私有成员。但是,如果您取消注释/注释标记的行,将Foo作为模板,它会编译并输出42.我在这里错过了什么?为什么这个工作?在我看来,它不应该。C++模板似乎打破访问说明符
感谢您的帮助。
#include <iostream>
class Bar {
private:
static const int x = 42;
};
//template <int> // uncomment me
struct Foo {
static const int i = Bar::x;
};
int main(int argc, char* argv[]) {
std::cout << Foo::i << std::endl; // comment me
//std::cout << Foo<0>::i << std::endl; // uncomment me
}
编译器错误,我猜猜我应该这样抱怨 – 2010-06-27 17:08:04
'-1'从我没有提到编译器的可能性是一个编译器错误 – sbi 2010-06-27 17:12:49
对不起sbi,意识到我应该完成了。已经把它作为评论詹姆斯的答案,它的海湾合作委员会4.4.3 – tjm 2010-06-27 17:14:14