Почему перегрузки отключений должны быть уникальными?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему перегрузки отключений должны быть уникальными?

Сообщение Anonymous »

Следующий класс имеет четыре перегрузки функции f . Когда t! = Int , все перегрузки имеют уникальные списки параметров, но когда t = int , все перегрузки имеют одинаковые списки параметров. Чтобы сделать его компиляцией, даже если int и t идентичны, я попытался отключить три функции, используя концепцию. Несмотря на это, компилятор генерирует ошибку, потому что Три отключенных перегрузки имеют идентичные подписи (https://godbolt.org/z/8aewdrts6):

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

#include 
template 
struct S {
void f(T, T) { /*...*/ }
void f(T, int) requires (!std::same_as) { /*...*/ }
void f(int, T) requires (!std::same_as) { /*...*/ }
void f(int, int) requires (!std::same_as) { /*...*/ }
};

int main() {
S s;
}
clang говорит, что ошибка: несколько перегрузки «F» экземпляра с одной и той же подписью «void» (int, int) ', а GCC говорит что -то похожее. (https://godbolt.org/z/tajvpypo4):
void f(int, T) requires (!std::same_as && true) { /*...*/ }
void f(int, int) requires (!std::same_as && true && true) { /*...*/ }
< /code>

[*] Почему язык определяется так, чтобы отключен < /strong> перегрузки должны иметь уникальные подписи? Я понимаю, что все перегрузки должны быть уникальными, потому что компилятор должен знать, какой из них вызвать. Но Неиседленные перегрузки не вызываются, поэтому требуется уникальность в этом случае кажется ненужной.
Есть ли лучше/приятнее/более элегантный обход>

Подробнее здесь: https://stackoverflow.com/questions/796 ... -be-unique
Ответить

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

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

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

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

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