パスワードを忘れた? アカウント作成
11933644 journal
プログラミング

okuの日記: int は int の基底クラスか 2

日記 by oku

Stack OverflowWhy is std::is_base_of true when T is a class type, but false when T is a built-in type? より:

要は is_base_of<int, int>()false を返すのはなんでやねん、というお話です (class 型同士なら true になる)。

あれ、そうなんだっけ、と思って n4296 (PDF 注意) の 20.10.6 Relations between types [meta.rel] を見直すと、確かに Example のところに is_base_of<int, int>()false を返す、とありますね。

GCC-4.8.4 や clang-3.5.1 の動作も n4296 の通りなので、それはそれでよいとして、どこかに rational はないもんですかね?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年02月24日 9時59分 (#2766573)

    規格には以下のようにあり、BaseがDerivedであることのほかに、2つの型が「(非共用体の)同じクラス型」であることをtrueとなる条件としていますね。なので、非クラス型はis_base_ofの対象外なのでしょう。

    > Base is a base class of Derived (Clause 10) without regard to cv-qualifiers or Base and Derived are not unions and name the same class type without regard to cv-qualifiers

    • by oku (4610) on 2015年02月28日 20時37分 (#2769460) 日記

      まあ、正直言って true / false のどちらにするかというだけの話なので、そうなった経緯が理解できればどちらでもよろしいかと思っています。 実用的には、元記事に「どっちがいい設計かってのは議論の余地があるだろうけど、is_same とか is_class とかあるんだし、十分じゃん」みたいな返信がある通り、プログラマ側が十分コントロールできる範囲だと思いますので。

      親コメント
typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...