どのような合法的なコードが、C4523「複数のデストラクタを指定した」Visual C ++の警告を引き起こす可能性がありますか?

MSDNによると、Visual C ++は、 C4523警告 クラスを発行することができます':複数のデストラクタが指定されています。そのような状況はどのように可能ですか?

私は以下を試みた:

class Class {
    ~Class();
    ~Class(int);
};

デストラクタが 'void'パラメータリストのエラーとC4523の警告とそれに続く

class Class {
    ~Class();
    ~Class();
};

メンバー関数が既に定義または宣言されているエラーが発生し、次の

class Class {
    int ~Class();
    ~Class();
};

デストラクタは戻り値の型を持つことはできませんというエラーが発生します。

だから私はどのようにC4523警告とエラーがないのですか?

6
私は答えが "none"だと思う。
追加された 著者 Billy ONeal,

3 答え

以下は、警告C4523を引き起こしますが、エラーの前にもあります

struct Foo 
{
  ~Foo() {}
  ~Foo() const {}
};


error C2583: 'Foo::~Foo' : 'const' 'this' pointer is illegal for constructors/destructors
warning C4523: 'Foo' : multiple destructors specified
3
追加された

次に、複数のデストラクタがエラーではなく警告である別の例を示します。

class C
{
    ~C();
    ~C() volatile;
};
2
追加された
@MooingDuck:Praetorianが例を加えた const タグによく似ています。 {code> volatile オブジェクトのために別のデストラクタを持つ正当な理由が増えたと感じています。しかし、C ++標準では、通常のメンバ関数では volatile 修飾子が使用できますが、デストラクタでは使用できません。
追加された 著者 Ben Voigt,
私は以前は揮発性の機能を見たことがない。
追加された 著者 Mooing Duck,

野生の推測:それは複数のクラスの継承を通じて可能性がありますか?クラスCがクラスAとBの両方から継承し、AとBがデストラクタを指定するがCはそうでないとします。

0
追加された
デフォルトのデストラクタが生成され、警告の理由はありません。
追加された 著者 sharptooth,