Как я могу проверить, является ли определенная перегрузка функции недействительной?C++

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

Сообщение Anonymous »

Я создаю класс с стертым типом TypeErased, используя std::variant, который может быть целым числом, комплексным числом, вектором или ошибкой.
При создании оператора сложения (который использует std::visit) я столкнулся с проблемой: я не хочу, чтобы определенные типы добавлялись вместе, и создание перегрузок кажется очень непрактичным. для каждой отдельной нежелательной комбинации.
Например, он должен иметь возможность складывать целое число с комплексным числом, но не вектор и целое число. Для этого я попытался использовать SFINAE (я думаю) для создания структуры, которая может определить, существует ли перегрузка функции:

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

#include
#include

void print(int) {}

template
struct FuncExists
{
template
constexpr static std::true_type test(int);
constexpr static std::false_type test(...);

constexpr static bool value = decltype(test(0))::value;
};

int main()
{
std::cout

Подробнее здесь: [url]https://stackoverflow.com/questions/78751702/how-can-i-check-if-a-certain-function-overload-is-invalid[/url]

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