Мне известно, что sizeof...(Args...)
возвращает количество типов в списке аргументов упакованного шаблона C ++ 0x, но я хотел реализовать его с точки зрения других возможностей для целей демонтации, но он не будет компилироваться.1002 *
// This is not a solution -- overload ambiguity.
// template <typename... Args> size_t num_args (); // Line 7
// template <>
constexpr size_t num_args ()
{
return 0;
}
template <typename H, typename... T>
constexpr size_t num_args () // Line 16
{
return 1 + num_args <T...> (); // *HERE*
}
int main ()
{
std :: cout << num_args <int, int, int> ();
}
Это ошибка при *HERE*
с
No matching function call to ...
... candidate is template<class H, class ... T> size_t num_args()
, то есть он не видит базовый вариант, который определен первым.Объявление вперед template<typename...T>num_args();
вносит неоднозначность в разрешение перегрузки.
x.cpp:30:45: note: candidates are:
x.cpp:7:36: note: size_t num_args() [with Args = {int, float, char}, size_t = long unsigned int]
x.cpp:16:9: note: size_t num_args() [with H = int, T = {float, char}, size_t = long unsigned int]
Я использую gcc 4.6.Как я могу сделать эту работу?
Спасибо.