Что означает знак"......"? т. е. оператор двойного многоточия на пакете параметров
просматривая текущую реализацию gcc новых заголовков C++11, я наткнулся на "......" знак. Вы можете проверить, что следующий код компилирует штрафа в размере [via ideone.com].
template <typename T>
struct X
{ /* ... */ };
template <typename T, typename ... U>
struct X<T(U......)> // this line is the important one
{ /* ... */ };
Итак, что же означает этот токен?
редактировать: похоже, подстриженный "......"в названии "...", Я действительно имел в виду"......". :)
2 ответа:
каждый экземпляр этой странности сопряжен со случаем регулярного одиночного многоточия.
template<typename _Res, typename... _ArgTypes> struct _Weak_result_type_impl<_Res(_ArgTypes...)> { typedef _Res result_type; }; template<typename _Res, typename... _ArgTypes> struct _Weak_result_type_impl<_Res(_ArgTypes......)> { typedef _Res result_type; }; template<typename _Res, typename... _ArgTypes> struct _Weak_result_type_impl<_Res(_ArgTypes...) const> { typedef _Res result_type; }; template<typename _Res, typename... _ArgTypes> struct _Weak_result_type_impl<_Res(_ArgTypes......) const> { typedef _Res result_type; };
Я предполагаю, что двойной эллипсис похож по смыслу на
_ArgTypes..., ...
, т. е. расширение вариационного шаблона с последующим списком varargs в стиле C.вот тест поддерживая эту теорию... я думаю, что у нас есть новый победитель для худшего псевдо-оператора когда-либо.
Edit: это, кажется, верно. §8.3.5 / 3 описывает один из способов чтобы сформировать список параметров как