Share via


is_pod クラス

型が POD かどうかをテストします。

構文

template <class T>
struct is_pod;

パラメーター

T
照会する型。

解説

T が POD (Plain Old Data) である場合、is_pod<T>::valuetrue です。 それ以外の場合は false です。

演算型、列挙型、ポインター型、およびメンバーへのポインター型は、POD です。

POD 型の cv-qualified バージョンは、それ自体が POD 型です。

POD の配列は、それ自体が POD です。

すべての非静的データ メンバーが POD である構造体または共用体は、次に該当する場合、それ自体が POD です。

  • ユーザーが宣言したコンストラクターを持たない。

  • 非静的なプライベートまたはプロテクト データ メンバーを持たない。

  • 基底クラスを持たない。

  • 仮想関数を持たない。

  • 参照型の非静的データ メンバーを持たない。

  • ユーザー定義のコピー代入演算子を持たない。

  • ユーザー定義のデストラクターを持たない。

したがって、POD 型の構造体や配列を含む POD 型の構造体や配列を再帰的に構築できます。

// std__type_traits__is_pod.cpp
// compile with: /EHsc
#include <type_traits>
#include <iostream>

struct trivial {
    int val;
};

struct throws {
    throws() {}  // User-declared ctor, so not POD

    int val;
};

int main() {
    std::cout << "is_pod<trivial> == " << std::boolalpha
        << std::is_pod<trivial>::value << std::endl;
    std::cout << "is_pod<int> == " << std::boolalpha
        << std::is_pod<int>::value << std::endl;
    std::cout << "is_pod<throws> == " << std::boolalpha
        << std::is_pod<throws>::value << std::endl;

    return (0);
}
is_pod<trivial> == true
is_pod<int> == true
is_pod<throws> == false

必要条件

ヘッダー: <type_traits>

名前空間: std

関連項目

<type_traits>