最終更新日時(UTC):
が更新

履歴 編集

class template
<type_traits>

std::is_virtualbase_of(C++26)

namespace std {
  template <class Base, class Derived>
  struct is_virtual_base_of;

  template <class Base, class Derived>
  inline constexpr bool is_virtual_base_of_v = is_virtual_base_of<Base, Derived>::value;
}

概要

Baseが型Derivedの仮想基底クラスか調べる。

要件

BaseDerivedが非共用体のクラスであり、異なる型である場合(cv修飾は無視される)、Derived完全型でなければならない。

効果

is_virtual_base_ofは、型Baseが型Derivedの仮想基底クラス (cv修飾は無視される) であるならばtrue_typeから派生し、そうでなければfalse_typeから派生する。

備考

派生時のprivateprotected指定は、派生関係の判定に影響しない。

#include <type_traits>

struct B {};
struct B1 : virtual public B {};
struct B2 : virtual public B {};
struct D : public B1, public B2 {};

static_assert(std::is_virtual_base_of_v<B, D> == true);
static_assert(std::is_virtual_base_of_v<B, B1> == true);
static_assert(std::is_virtual_base_of_v<B, B2> == true);

// cv修飾は無視される
static_assert(std::is_virtual_base_of_v<const B, const D> == true);

// クラス型ではない
static_assert(std::is_virtual_base_of_v<int, char> == false);

int main() {}

出力

バージョン

言語

  • C++26

処理系

参照