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

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

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


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

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

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

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

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

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

Быстрый ответ, комментарий, отзыв

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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