При создании оператора сложения (который использует 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]