asio模板问题不懂

最近在研究asio网络库,在里面遇到一个模板问题,不懂是怎么回事,请帮忙解释下。

template 
char (&one_arg_handler_test(Handler h, ...))[2];

跟同事一起整明白了,分享下

// $ g++ -g -std=c++17 main.cpp -o main
#include <iostream>
#include <type_traits>


// one_arg_handler_test等价f
template <typename Handler>
char (&one_arg_handler_test(Handler h, ...))[2];
// 简单
typedef char char_array[2]; 
template <typename Handler>
char_array & f(Handler h,...);


// one_arg_handler_test2 等价 f2
char (&one_arg_handler_test2(...))[2];
// 简单
typedef char char_array[2]; 
char_array & f2(...);

 
int main()
{
    std::cout << std::is_same_v<decltype(f<char>), decltype(one_arg_handler_test<char>)> << std::endl;
    std::cout << std::is_same_v<decltype(f2), decltype(one_arg_handler_test2)> << std::endl;
    
    return 0;
}

char (&one_arg_handler_test(Handler h, ...))[2];

这句里面的& 是 char (&)[2],语法表达的含义是 char [2]的引用类型