私は(可能性のある)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
。
些細な構文の問題を見落としていませんか?私はルールを破っていますか?このコードは、gcc4.3.4で問題なくコンパイルされます。それはVC6のさらに別のコンプライアンスの問題ですか?
ありがとう!