Почему предложения require недостаточно для устранения неоднозначности функции с зависимым типом?C++

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

Сообщение Anonymous »

В следующем примере (попробуйте онлайн) добавление тривиального ограничения требует true достаточно для выбора правильной перегрузки, когда аргумент имеет тип int, но недостаточно, когда это зависимый тип. И GCC, и Clang показывают это.
Мое единственное предположение: использование зависимого имени приводит к тому, что при разрешении перегрузки они считаются равными, но единственное, что я нашел в CPPReference, это:< /p>

При определении эквивалентности двух зависимых выражений учитываются только задействованные зависимые имена, а не результаты поиска имен (ссылка).

Это подсказывает мне, что они будут считаться равными по рангу, и тогда вступят в силу концептуальные правила - как это происходит в случае int?
#include

template requires true
void Overloaded(int const&)
{ std::puts("int: concept"); }

template
void Overloaded(int const&)
{ std::puts("int: non-concept"); }

template requires true
void Overloaded(typename T::Arguments const&)
{ std::puts("concept"); }

template
void Overloaded(typename T::Arguments const&)
{ std::puts("non-concept"); }

int main() {
struct HasArgs {
struct Arguments {};
};

Overloaded(int{}); // ok
Overloaded(HasArgs::Arguments{}); // error
}

Ошибка (только отчасти полезная):
:27:24: error: call of overloaded 'Overloaded(main()::HasArgs::Arguments)' is ambiguous
27 | Overloaded(HasArgs::Arguments{}); // error
:13:6: note: candidate: 'void Overloaded(const typename T::Arguments&) [with T = main()::HasArgs; typename T::Arguments = main()::HasArgs::Arguments]'
13 | void Overloaded(typename T::Arguments const&)
:17:6: note: candidate: 'void Overloaded(const typename T::Arguments&) [with T = main()::HasArgs; typename T::Arguments = main()::HasArgs::Arguments]'
17 | void Overloaded(typename T::Arguments const&)


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему предложения require недостаточно для устранения неоднозначности функции с зависимым типом?
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ повлиять на сортировку приложений в диалоговом окне устранения неоднозначности?
    Anonymous » » в форуме Android
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous
  • Предложения по разрешению неоднозначности в системе
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Предложения по разрешению неоднозначности в системе
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Предложения по разрешению неоднозначности в системе
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

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