bad_function_call std::function

Возникала проблема с std::function, генерируется исключение, с обычными указателями на функции все работает нормально, когда пытаюсь сделать через std::function выскакивает исключение, не получается исправить

#include <iostream>
#include <functional>

    typedef int (*pArithmeticFcn1)(int, int);
    using pArithmeticFcn2 = int (*)(int, int);
    using pArithmeticFcn3 = std::function<int(int, int)>;

    int add(int num1, int num2);
    int subtract(int num1, int num2);
    int multiply(int num1, int num2);
    int divide(int num1, int num2);
    
    int numInput();
    char symbolInput();
    bool inputError();
    
    pArithmeticFcn3 getArithmeticFcn(char symbolMatOperator);
    
    struct ArithmeticStruct {
        char mathOperator = ' ';
        pArithmeticFcn3 pFunc = nullptr;
    };
    
    static ArithmeticStruct arithmeticArray[4] {
        { arithmeticArray[0].mathOperator = '+', arithmeticArray[0].pFunc = add },
        { arithmeticArray[1].mathOperator = '-', arithmeticArray[1].pFunc = subtract },
        { arithmeticArray[2].mathOperator = '*', arithmeticArray[2].pFunc = multiply },
        { arithmeticArray[3].mathOperator = '/', arithmeticArray[3].pFunc = divide }
    };
    
    int main()
    {
        int num1;
        int num2;
        int variant;
        char arithmeticSymbol;
        pArithmeticFcn3 pFunction;
    
        do {
            std::cout << "Ввести числа - 1 (или выйти 0)";
            variant = numInput();
            if (variant == 1) {
                num1 = numInput();
                arithmeticSymbol = symbolInput();
                num2 = numInput();
                pFunction = getArithmeticFcn(arithmeticSymbol);
    
                try {
                    std::cout << "\nResult: " << pFunction(num1, num2) << "\n\n";
                }
    
                catch (const std::bad_function_call& e) {
                    std::cout << e.what() << '\n';
                }
            } else if (variant == 0) {
                break;
            } else {
                std::cout << "error!!! введены некорректные данные\n\n";
                continue;
            }
        } while (true);
    
        return 0;
    }
    
    int add(int num1, int num2)
    {
        return num1 + num2;
    }
    
    int subtract(int num1, int num2)
    {
        return num1 - num2;
    }
    
    int multiply(int num1, int num2)
    {
        return num1 * num2;
    }
    
    int divide(int num1, int num2)
    {
        return num1 / num2;
    }
    
    int numInput()
    {
        int num = 0;
        do {
            std::cout << "\nВведите число: ";
            std::cin >> num;
            if (inputError()) {
                continue;
            } else {
                break;
            }
        } while (true);
    
        return num;
    }
    
    char symbolInput()
    {
        char symbol = ' ';
        do {
            std::cout << "\nВыберите математическую функцию (+, -, *, /): ";
            std::cin >> symbol;
            if (inputError()) {
                continue;
            } else {
                break;
            }
        } while (true);
    
        return symbol;
    }
    
    bool inputError()
    {
        bool result = false;
        std::cin.ignore(32767, '\n');
        if (std::cin.fail()) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cout << "error!!! ошибка ввода\n\n";
            result = true;
            return result;
        } else {
            return result;
        }
    }
    
    pArithmeticFcn3 getArithmeticFcn(char symbolMatOperator)
    {
        for (const auto &i : arithmeticArray) {
            if (symbolMatOperator == i.mathOperator) {
                return i.pFunc;
            }
        }
        std::cout << "error!!! Введен некорректный арифметический символ, "
                  << "разрешены символы (+, -, *, /)\n\n";
    
        return nullptr;
    }

Ответы (0 шт):