Этот блок улова недоступен? - PullRequest
0 голосов
/ 05 февраля 2020

Я думаю о том, как сломать эту простую программу, которую я создал. У меня есть блок try-catch вокруг простого оператора деления, но я не знаю, невозможно ли создать исключение в этом случае.

Это мой класс Values.hpp, который создает объект, который имеет значение и exception_ptr. Если указатель исключения для объекта является нулевым, то этот объект является действительным.

#ifndef VALUES_HPP
#define VALUES_HPP

#include <exception>

template <typename T>
class Values
{
public:
    Values(T t);
    Values(std::exception_ptr e);
    bool isValid() const;
    T const& getValue() const;

private:
    T val;
    std::exception_ptr error;
};

    template<typename T>
    Values<T>::Values(T t) : val{ t }, error{nullptr}
    {
    }

    template<typename T>
    Values<T>::Values(std::exception_ptr e)
    {
    }

    template<typename T>
    inline bool Values<T>::isValid() const
    {
        return !error;
    }

    template<typename T>
    inline T const & Values<T>::getValue() const
    {
        if (!error) return val;
        std::rethrow_exception(error);
    }

    template <typename T0, typename T1>
    Values<decltype(std::declval<T0>() / std::declval<T1>())> operator/(Values<T0> const& first, Values<T1> const& second)
    {
        if (!first.isValid()) return first;
        if (!second.isValid()) return second;
        try
        {
            auto answer = fiest.getValue() / second.getValue();
            return answer;
        }
        catch (...) //Is this catch unreachable?
        {
            return std::current_exception();
        }
    }

#endif

Вот мой основной класс, который использует объекты Values ​​и оператор деления. Именно в этом классе я хочу иметь возможность что-то изменить, чтобы достичь оператора catch.

#include “Values.h”
#include <string>

int main()
{
    Values<int> first(10);
    Values<int> second(10);
    const auto answer = first / second;

    Values<int> third(std::make_exception_ptr(std::string(“test1”)));
    Values<int> fourth(10);
    const auto answer2 = third / fourth;
}

Есть ли способы достичь этого оператора catch? Или это недоступно. Я не смог найти способ. Допускается добавление дополнительного кода в основной класс.

...