HP C/aC++ コンパイラ バージョン A.03.85 を使用して、HP-UX 11.11 でこの正当な C++ コードをビルドしようとしています。
class BaseClass
{
public:
virtual int sum(int i) = 0;
};
class Derived : public BaseClass
{
public:
using BaseClass::sum;
virtual int sum(int i1, int i2) = 0;
};
class Impl : public Derived
{
public:
virtual int sum(int i) { return i+1; }
virtual int sum(int i1, int i2) { return i1+i2; }
};
int main()
{
Derived * obj = new Impl;
obj->sum(5);
delete obj;
}
ただし、次のコンパイル エラーで失敗します。
Error 181: "test_using.cpp", line 26 # Expected 2 argument(s) for "int Derived::sum(int,int)"; had 1 instead.
obj->sum(5);
^^^^^^^^^^^
これとまったく同じコードを、Linux、AIX、Windows などの他のプラットフォームで問題なくビルドできます。「BaseClass」から「= 0」スニペットを削除すると、すべてが期待どおりに機能するため、HP の問題は純粋な仮想メソッドに関連しているようです。
だから、私の質問は次のとおりです。以前に同様の問題に直面したことがありますか? どのように回避しましたか?これは既知の C++ バグですか?
純粋な仮想メソッドを通常のメソッドに変えることはできないことに注意してください。