コンテンツにスキップ

yu::tuples::size

namespace yu::tuples {
    template <typename T>
    struct size;

    template <typename T>
    inline constexpr std::size_t size_v = size<T>::value;
}

概要

sizeは,Tupleの要素数を取得する.

効果

  1. std::remove_cvref_t<T>が要素数の判明している配列型ならば,その配列の要素数を静的メンバ定数valueとして定義する.
  2. std::tuple_size<std::remove_cvref_t<T>>::valueが有効な式であれば,std::tuple_size<std::remove_cvref_t<T>>::valueを静的メンバ定数valueとして定義する.

以上のどれにも当てはまらないとき,静的メンバ定数valueは定義されない.

カスタマイゼーションポイント

2の条件を満たすようにする.std::tuple_sizeを特殊化することでカスタマイズできる.

#include <tuple>
#include <yu/tuples/size.hpp>

int main() {
    // std::tuple
    {
        using T = std::tuple<int, char>;

        static_assert(2 == yu::tuples::size<T>::value);
        // 参照でもよい
        static_assert(2 == yu::tuples::size<T&>::value);
    }

    // 組み込み配列
    {
        using T = int [5];

        static_assert(5 == yu::tuples::size<T>::value);
    }
}

出力