我想我遇到了(可能的)VC6(我知道。这是我们使用的。)编译器错误,但我对我刚刚错过了一些愚蠢的事实持开放态度。给定以下代码(这只是一个示例!):
#include <iostream>
// Class with template member function:
class SomeClass
{
public:
SomeClass() {};
template<class T>
T getItem()
{
return T();
};
};
// Dummy just used to recreate compiler error
class OtherClass
{
public:
OtherClass() {};
};
std::ostream& operator<<( std::ostream& oStr, const OtherClass& obj )
{
return oStr << "OtherClass!";
};
// Main illustrates the error:
int main(int argc, char* argv[])
{
SomeClass a;
OtherClass inst2 = a.getItem<OtherClass>(); // Error C2275 happens here!
std::cout << inst2 << std::endl;
return 0;
}
如果我尝试编译此代码 VC6,则会在a.getItem<OtherClass>()
产生时死掉:
Error C2275: 'OtherClass' : illegal use of this type as an expression
.
我是否忽略了一些琐碎的语法问题?我违反规则了吗?这段代码在 gcc 4.3.4 下编译得很好。这是 VC6 的另一个合规性问题吗?
谢谢!