
okuの日記: int は int の基底クラスか 2
日記 by
oku
Stack Overflow は Why 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 はないもんですかね?
Akira Takahashi (スコア:0)
規格には以下のようにあり、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
Re:Akira Takahashi (スコア:1)
まあ、正直言って true / false のどちらにするかというだけの話なので、そうなった経緯が理解できればどちらでもよろしいかと思っています。 実用的には、元記事に「どっちがいい設計かってのは議論の余地があるだろうけど、is_same とか is_class とかあるんだし、十分じゃん」みたいな返信がある通り、プログラマ側が十分コントロールできる範囲だと思いますので。