#pragma once #include #include #include #include namespace cpp17 { template [[nodiscard]] constexpr auto type_name() -> const char* { if constexpr (std::is_integral_v) { return "integral"; } else if constexpr (std::is_floating_point_v) { return "floating"; } else { return "other"; } } template [[nodiscard]] auto element_count(const Container& container) -> std::size_t { if constexpr (std::is_member_function_pointer_v) { return container.size(); } else { std::size_t count = 0; for ([[maybe_unused]] const auto& item : container) { ++count; } return count; } } [[nodiscard]] auto stringify_ints(const std::vector& data) -> std::string; } // namespace cpp17