В C ++ существует механизм, который объединяет ссылки в некоторых контекстах шаблона и для указателей на функции. void (*)() эквивалентно void().
void (*)()
void()
Я пытался гуглить, но без фактического термина это невозможно.
Я только что нашел это !! это называется reference collapsing
reference collapsing
c.f. https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers
void f(int& && param); // initial instantiation of f with lvalue
Из-за ссылки на этот экземпляр этот экземпляр является основным facie неверно, но исходный код - «f (x)» - вполне разумен. Чтобы избежать его отклонения, C ++ 11 выполняет «свертывание ссылок», когда ссылки на ссылки возникают в таких контекстах, как шаблон конкретизация .