Почему перегрузки отключений должны быть уникальными?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

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