Учитываются ли преобразования аргументов по умолчанию при разрешении перегрузки?C++

Программы на C++. Форум разработчиков
Гость
Учитываются ли преобразования аргументов по умолчанию при разрешении перегрузки?

Сообщение Гость »


Рассмотрим следующий код:

void foo(int* = 0); // (1) недействительный Фу (интервал = 0); // (2) интервал основной() { Фу (0); // ОК, вызывает (2) Фу(); // ошибка, неоднозначная перегрузка } И GCC, и clang действуют подобным образом, но я не уверен, что это правильно.

[expr.call] p6 просто говорит:

Если соответствующий аргумент отсутствует, используется аргумент по умолчанию для параметра.

Это говорит о том, что после вызова функции foo превратится в foo(0) и что 0 придется преобразовать в int* для (1).

Поэтому я считаю, что оба вызова функции должны быть действительными. Однако есть ли формулировки, противоречащие этой идее? Считаются ли преобразования аргументов по умолчанию «бесплатными», чтобы они не участвовали в последовательности преобразования?

Вернуться в «C++»