• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class template
    <variant>

    std::variant_size

    namespace std {
      template <class T>
      struct variant_size;                   // (1) C++17 先行宣言
    
      template <class T>
      struct variant_size<const T>;          // (2) C++17
    
      template <class T>
      struct variant_size<volatile T>;       // (3) C++17
                                             // C++20で非推奨
    
      template <class T>
      struct variant_size<const volatile T>; // (4) C++17
                                             // C++20で非推奨
    
      template <class T>
      inline constexpr size_t variant_size_v
        = variant_size<T>::value;            // (5) C++17
    
      template<class... Types>
      struct variant_size<variant<Types...>>
        : integral_constant<std::size_t, sizeof...(Types)> {}; // (6) C++17
    }
    

    概要

    variant_sizeは、std::variantクラスの候補型の数を取得するためのクラスである。

    要素数は、integral_constantの機能を利用してコンパイル時の定数値として取得できる。

    • (1) : 先行宣言
    • (2) : const修飾付きのstd::variant型の、候補型の数を取得する
    • (3) : volatile修飾付きのstd::variant型の、候補型の数を取得する
    • (4) : const volatile修飾付きのstd::variant型の、候補型の数を取得する
    • (5) : 変数テンプレート版
    • (6) : 修飾なしのstd::variant型の、候補型の数を取得する

    非推奨の詳細

    • (3), (4) : これらの部分特殊化は、型のvolatile修飾を部分的に非推奨にすることにともなって、非推奨化される

    #include <variant>
    #include <string>
    
    int main()
    {
      // (6) CV修飾なしのstd::variant型の、候補型 (int, std::string, double) の数を取得する
      static_assert(std::variant_size<
        std::variant<int, std::string, double>
      >::value == 3);
    
      // (2) const修飾付きのstd::variant型の、候補型の数を取得する
      static_assert(std::variant_size<
        const std::variant<int, std::string, double>
      >::value == 3);
    
      // (5) 変数テンプレート版
      static_assert(std::variant_size_v<
        std::variant<int, std::string, double>
      > == 3);
    }
    

    出力

    バージョン

    言語

    • C++17

    処理系

    関連項目

    参照