奇怪的语法 - 参数包扩展中的两个省略号运算符

jro*_*rok 6 c++ variadic-templates c++11

可能重复:
"......"令牌是什么意思?

在查看libc ++的标题时<type_traits>,我偶然发现了这些类模板特化:

template<typename>
    struct is_function
    : public false_type { };

template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes...)>
    : public true_type { };

template<typename _Res, typename... _ArgTypes>
    struct is_function<_Res(_ArgTypes......)>    // <-- Huh?
    : public true_type { };
Run Code Online (Sandbox Code Playgroud)

有三个对特(的const,volatile并且const volatile变化),都以同样的方式.

它看起来像两个elipsis运算符组合在一起.我唯一能提到的就是cplusplus.com,它说它也可以用space(_ArgTypes... ...)或逗号(_ArgTypes..., ...)编写,但没有解释它的含义.

那么,这种语法意味着什么?像这样的专业化的目的是什么?