Аргумент по умолчанию v приоритет шаблонов в разрешении перегрузки - PullRequest
3 голосов
/ 03 апреля 2012

Если у меня установлена ​​перегрузка функции, подобная

template<typename T> void f(T&& t, int x = 1);
void f(int x = 0);

Какие из них будут вызываться в предпочтении, если я вызову f с целочисленным аргументом?например,

f(5);

1 Ответ

5 голосов
/ 03 апреля 2012

void f(int x = 0); будет вызван.Во время разрешения перегрузки не шаблон всегда предпочтительнее шаблона, когда тип аргумента является точным соответствием (т. Е. Не требует преобразований) - см. §13.3.3 / 1.

(обратите внимание, что если не-темплатная перегрузка была вместо void f(long x = 0);, и место вызова оставалось тем же, или если перегрузка оставалась той же, но вместо места вызова вместо f(5L);, вместо этого будет вызываться перегрузка шаблона.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...