summaryrefslogtreecommitdiffhomepage
path: root/compat/array-size.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-08-10 18:36:41 +0200
committerStanislaw Halik <sthalik@misaki.pl>2024-08-11 11:07:56 +0200
commit4a3dd8b6fe07961f5f9b4b839f718019657f8dd2 (patch)
tree480a10d268168c20542459b8d72f82a4e71c6baf /compat/array-size.hpp
parentdd9b8bd02f301291aa47cf4b52f19c6f5805ac1f (diff)
compat, test: improve {static_,}array_size
Diffstat (limited to 'compat/array-size.hpp')
-rw-r--r--compat/array-size.hpp7
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