Перегрузка шаблона функций с несколькими совпадениямиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Перегрузка шаблона функций с несколькими совпадениями

Сообщение Anonymous »

У меня есть две функции шаблона max , и попытаться вызвать одну из них.

Код: Выделить всё

    #include 
#include 

template 
auto max(T1 a, T2 b) {
return b < a ? a : b;
}

template 
RT max(T1 a, T2 b) {
return b < a ? a : b;
}

int main(void) {
max(4, 7.2);
return 0;
}
Здесь, max (4, 7.2) вызывает двусмысленность, генерируя ошибку компиляции.

Код: Выделить всё

: In function 'int main()':
:15:13: error: call of overloaded 'max(int, double)' is ambiguous
15 |     max(4, 7.2);
|     ~~~~~~~~^~~~~~~~
:5:6: note: candidate: 'auto max(T1, T2) [with T1 = int; T2 = double]'
5 | auto max(T1 a, T2 b) {
|      ^~~
:10:4: note: candidate: 'RT max(T1, T2) [with RT = int; T1 = int; T2 = double]'
10 | RT max(T1 a, T2 b) {
|    ^~~
Compiler returned: 1
Две функции Max можно интерпретировать следующим образом при вызове Max (4, 7.2) :

Код: Выделить всё

double max(int a, double b) {
return b < static_cast(a) ? static_cast(a) : b;
}

int max(int a, double b) {
return b < static_cast(a) ? static_cast(a) : b;
}
Компилятор может предпочесть первый вариант, поскольку он имеет более высокую точность при возврате значения.
Почему в этом случае возникает неоднозначность?

Подробнее здесь: https://stackoverflow.com/questions/793 ... le-matches
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как обрабатывать web.xml с несколькими точными совпадениями?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Проверить данные, которых нет в массиве, с двумя совпадениями значений
    Гость » » в форуме Php
    0 Ответы
    10 Просмотры
    Последнее сообщение Гость
  • Перегрузка функции шаблона члена C++ std::enable_if для класса шаблона
    Anonymous » » в форуме C++
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Перегрузка функции шаблона члена C++ std::enable_if для класса шаблона
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Предложения «Перегрузка» и «требования»: какая перегрузка выбрана?
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous

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