回答編集履歴

2

内容を訂正

2018/08/16 07:05

投稿

SaitoAtsushi
SaitoAtsushi

スコア5444

test CHANGED
@@ -1,9 +1 @@
1
- JISX3014:2003 の 5.3.5 `delete` について説明があり、以下はそこらの引用です
1
+ コンパイルバグもしれません
2
-
3
-
4
-
5
- > 演算対象の静的な型がその動的な型と異なる場合、その静的な型は、演算対象の動的な型の基底クラスでなければならず、仮想デストラクタをもっていなければならない。 そうでない場合の動作は、未定義とする。
6
-
7
-
8
-
9
- 今回の場合、動的な型が `Derived` であるにもかかわらず、静的な型は `Base` であり、仮想デストラクタを持ってもいないので未定義の動作であることになります。 ですので、 gcc の挙動も clang の挙動も言語仕様通りですし、なんならクラッシュしても仕様通りですので、実質的にはやってはいけないことと考えてください。

1

間違って型名を逆に書いていたのを訂正

2018/08/16 07:05

投稿

SaitoAtsushi
SaitoAtsushi

スコア5444

test CHANGED
@@ -6,4 +6,4 @@
6
6
 
7
7
 
8
8
 
9
- 今回の場合、動的な型が Base であるにもかかわらず、静的な型は Derived であり、仮想デストラクタを持ってもいないので未定義の動作であることになります。 ですので、 gcc の挙動も clang の挙動も言語仕様通りですし、なんならクラッシュしても仕様通りですので、実質的にはやってはいけないことと考えてください。
9
+ 今回の場合、動的な型が `Derived` であるにもかかわらず、静的な型は `Base` であり、仮想デストラクタを持ってもいないので未定義の動作であることになります。 ですので、 gcc の挙動も clang の挙動も言語仕様通りですし、なんならクラッシュしても仕様通りですので、実質的にはやってはいけないことと考えてください。