1

C ++ 11ではstd::is_base_of<B, D>、DがBから派生している場合、または両方が同じ非ユニオンクラスである場合、標準はtrueを返す必要があります。ただし、VC ++ 2010では、タイプBがタイプDの唯一の基本クラスである場合、stl実装テンプレートはtrueを返します。バグですか?

サンプルセクションのhttp://msdn.microsoft.com/en-us/library/bb982243(v=vs.100).aspxページ

std::is_base_of<base, base> == true

ただし、これはVC ++2010STLの実装には対応していません。C++11規格の要件と一致していますが。バグはどこにありますか?

4

1 に答える 1

7

is_base_of<int, int>::valueテンプレートパラメータがクラスタイプである場合にのみ評価できるためfalse(あなたのコメントは、これが実際の質問であることを示しています)に評価されます。C++11 標準の表 51 - 型関係の述語 (C++ 20.9.6「型間の関係」) では、次の場合にのみ true と評価されるように定義されています (強調が追加されています)。is_base_of<>::valuetrueis_base_type<>

base が cv-qualifiers に関係なく Derived の基底クラスであるか、base と Derived が共用体ではなく、cv-qualifiers に関係なく同じクラス型の名前を付けている

C++11 標準には、その例の 1 つとして次のものもあります (C++11 20.9.6/3)。

is_base_of<int, int>::value // false
于 2012-12-11T09:47:45.670 に答える