Код: Выделить всё
template
void AcceptAnything(T&&);
void Foo();
template
void Foo();
void Bar() {
AcceptAnything(&Foo);
}
Код: Выделить всё
:10:3: error: no matching function for call to 'AcceptAnything'
10 | AcceptAnything(&Foo);
| ^~~~~~~~~~~~~~
:2:6: note: candidate template ignored: couldn't infer template argument 'T'
2 | void AcceptAnything(T&&);
| ^
- Единственная функция с именем Foo здесь — нешаблонная, а другая — семейство функций. с именем Foo для любого типа T.
- Выражение &Foo относится к адрес конкретной функции с именем Foo.
- Не существует такой вещи, как адрес семейства функций.
Почему &Foo неоднозначен в этом случае и какая часть стандарта охватывает это?
Подробнее здесь: https://stackoverflow.com/questions/781 ... lated-vers