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の要素数を取得する.
効果
std::remove_cvref_t<T>が要素数の判明している配列型ならば,その配列の要素数を静的メンバ定数valueとして定義する.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);
}
}
出力