An unnamed argument is the correct solution.
So you can use an intermediate function:
template <typename T> constexpr void avoid_warning_for_unused_parameter(T&&) noexcept{}
and then:
template <typename T, std::size_t N> constexpr std::size_t arraySize(T (&array)[N]) noexcept { avoid_warning_for_unused_parameter(array); return N; }
For C ++ 11 you need to hack a bit:
template <typename... Ts> constexpr auto return_first_and_avoid_warning_for_unused_parameters(T&&t, Ts&&) noexcept -> decltype(t) { return t; } template <typename T, std::size_t N> constexpr std::size_t arraySize(T (&array)[N]) noexcept { return return_first_and_avoid_warning_for_unused_parameters(N, array); }
source share