diff options
Diffstat (limited to 'compat/array-size.hpp')
| -rw-r--r-- | compat/array-size.hpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/compat/array-size.hpp b/compat/array-size.hpp index 15eb66ab..4d9b6ce6 100644 --- a/compat/array-size.hpp +++ b/compat/array-size.hpp @@ -5,15 +5,18 @@ namespace floormat::detail { template<typename T> struct array_size_; template<typename T, size_t N> struct array_size_<T(&)[N]> : std::integral_constant<size_t, N> {}; +template<typename T, size_t N> struct array_size_<T(*)[N]> : std::integral_constant<size_t, N> {}; template<typename T, size_t N> struct array_size_<T[N]> : std::integral_constant<size_t, N> {}; template<typename T, size_t N> struct array_size_<std::array<T, N>> : std::integral_constant<size_t, N> {}; template<typename T, size_t N> struct array_size_<StaticArray<N, T>> : std::integral_constant<size_t, N> {}; +template<typename C, typename T> struct array_size_<T C::*> : std::integral_constant<size_t, array_size_<std::remove_cvref_t<T>>::value> {}; + } // namespace floormat::detail namespace floormat { -template<typename T> constexpr inline size_t static_array_size = detail::array_size_<T>::value; -template<typename T> constexpr inline size_t array_size(const T&) noexcept { return detail::array_size_<T>::value; } +template<typename T> constexpr inline size_t static_array_size = detail::array_size_<std::remove_cvref_t<T>>::value; +template<typename T> constexpr inline size_t array_size(const T&) noexcept { return detail::array_size_<std::remove_cvref_t<T>>::value; } } // namespace floormat |
