#pragma once #include #include #include namespace stdx { inline namespace v1 { namespace detail { template struct ct_capacity_fail { static_assert(always_false_v>, "Type does not support compile-time capacity"); }; } // namespace detail template constexpr auto ct_capacity_v = detail::ct_capacity_fail{}; template constexpr auto ct_capacity_v> = N; template constexpr auto ct_capacity_v = ct_capacity_v; template constexpr auto ct_capacity(T &&) -> std::size_t { return ct_capacity_v>; } } // namespace v1 } // namespace stdx #if __has_include() #include #if __cpp_lib_span >= 202002L namespace stdx { inline namespace v1 { template constexpr auto ct_capacity_v> = N; template constexpr auto ct_capacity_v> = detail::ct_capacity_fail>{}; } // namespace v1 } // namespace stdx #endif #endif