解决方法
使用sizeof …:
template<typename... Args> constexpr std::size_t length(Args...) { return sizeof...(Args); }
请注意,您不应使用unsigned,而应使用std :: size_t(在< cstddef>中定义).此外,该函数应该是一个常量表达式.
不使用sizeof …:
namespace detail { template<typename T> constexpr std::size_t length(void) { return 1; // length of 1 element } template<typename T,typename... Args> constexpr std::size_t length(void) { return 1 + length<Args...>(); // length of one element + rest } } template<typename... Args> constexpr std::size_t length(Args...) { return detail::length<Args...>(); // length of all elements }
注意,一切都是完全未经测试的.