这可以解决VS 2009中的问题吗?我傻了吗? GCC发出警告,模板是私有的......? 我错过了什么?
#include <iostream>
using namespace std;
class A
{
private:
template<typename T>
A& operator<<(const T & v)
{
cout << v << endl;
return *this;
}
};
int main()
{
A a;
a << 4;
system("pause");
}
答案 0 :(得分:3)
Microsoft承认该错误并声称它将在下一个主要版本的编译器中修复(我将其读作VC11 / VS-无论是在2010之后 - 可能不是VC10 / VS2010的服务包):< / p>
从注释中,修复似乎已经对内部编译器构建。
答案 1 :(得分:1)
此代码不应编译 - 这是VS中的错误(或愚蠢的扩展)。 GCC也应该拒绝它。操作员在使用范围内无法访问。
Comeau正确对待这个:
"ComeauTest.c", line 28: error: function "A::operator<<(const T &) [with T=int]"
(declared at line 14) is inaccessible
a << 4;
编辑:相关的标准摘录,来自13.3 / 1
[注意:选择的功能 不保证重载分辨率 适合上下文。 其他限制,如 功能的可访问性,可以 在调用上下文中使用它 病态的。 ]
答案 2 :(得分:0)
不,你不是傻瓜 - 这是破碎的代码,应该被拒绝。 Comeau编译器(http://www.comeaucomputing.com/tryitout)确实正确拒绝它。