Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <array> 7 : #include <cstddef> 8 : #include <type_traits> 9 : 10 : namespace tt { 11 : /// @{ 12 : /// \ingroup TypeTraitsGroup 13 : /// \brief Check if type T is a std::array of a given size 14 : /// 15 : /// \details 16 : /// Given a size_t `N` and type `T` derives from std::true_type if `T` 17 : /// is a std::array of size `N` and from std::false_type otherwise. 18 : /// 19 : /// \usage 20 : /// For any type `T` 21 : /// \code 22 : /// using result = tt::is_std_array_of_size<N, T>; 23 : /// \endcode 24 : /// 25 : /// \metareturns 26 : /// std::bool_constant 27 : /// 28 : /// \semantics 29 : /// If `T` is a std::array of size `N` then 30 : /// \code 31 : /// typename result::type = std::bool_constant<true>; 32 : /// \endcode 33 : /// otherwise 34 : /// \code 35 : /// typename result::type = std::bool_constant<false>; 36 : /// \endcode 37 : /// 38 : /// \example 39 : /// \snippet Test_IsStdArrayOfSize.cpp is_std_array_of_size_example 40 : /// \see is_std_array 41 : /// \tparam T the type to check 42 : template <size_t N, typename T> 43 1 : struct is_std_array_of_size : std::false_type {}; 44 : 45 : /// \cond HIDDEN_SYMBOLS 46 : template <size_t N, typename T> 47 : struct is_std_array_of_size<N, std::array<T, N>> : std::true_type {}; 48 : /// \endcond 49 : 50 : /// \see is_std_array_of_size 51 : template <size_t N, typename T> 52 1 : constexpr bool is_std_array_of_size_v = is_std_array_of_size<N, T>::value; 53 : 54 : /// \see is_std_array_of_size 55 : template <size_t N, typename T> 56 1 : using is_std_array_of_size_t = typename is_std_array_of_size<N, T>::type; 57 : /// @} 58 : } // namespace tt