テンプレート化されたクラスのメンバー関数内で次の問題が発生しました。
#include <map>
using std::map;
template <typename A,typename B>
class C {
public:
B f(const A&,const B&) const;
private:
map<A,B> D;
};
template <typename A,typename B>
B C<A,B>::f(const A&a,const B&b) const {
map<A,B>::const_iterator x = D.find(a);
if(x == D.end())
return b;
else
return x->second;
}
これを g++ でコンパイルすると、次のエラーが発生します。
Bug.C: In member function 'B C<A,B>::f(const A&, const B&) const':
Bug.C:12: error:expected ';' before 'x'
Bug.C:13: error: 'x' was not declared in this scope
ただし、クラスと関数のテンプレート化されていないバージョンを作成すると、A と B の両方が int になり、問題なくコンパイルされます。なぜ「;」が必要なのか想像できないので、エラーは少し不可解です。「x」の前。