Visual Studio 2010 では正常にコンパイルされるテンプレート化された C++ コードがありますが、Linux GCC ではコンパイルされません。コードは私には問題ないように見えるので、私の質問は次のとおりです。ここで何が間違っているのですか?
これはエラーを発生させるコードです(問題のある部分だけを取得するために、無関係なものをすべて削除しました):
class CaseInsensitiveCompare
{
public:
bool operator() (const RString& first, const RString& second) const;
};
template <typename T>
T CombinedValue<T>::getUpgradedSettingValue(const T& defaultValue, const UpgradeList& upgrades, const RString& className) const
{
std::map<RString, CombinedSetting<T>, CaseInsensitiveCompare> myMap;
std::map<RString, CombinedSetting<T>, CaseInsensitiveCompare>::iterator myIter;
}
これは問題なくコンパイルおよび機能しますが、Linux 上の GCC ではコンパイル エラーが発生します。コンパイラから得られるエラーは、;が存在する必要があるということです。myIterの前。したがって、奇妙なことに、myMapの行は問題ありませんが、myIterの行はそうではありません。myMapで行を削除しても、まったく同じ問題が発生します。
ここで何が間違っていますか?私の現在の推測では、これは GCC コンパイラ自体のエラーであるということですが、もしそうなら、どうすれば回避できますか?