mardi 5 novembre 2019

C++11 template specialization with void type and argument

In a C++11 program, I define these templates:

template <class T>
class c_out {
    public:
        bool success = false;
        std::string error = "";
        T result;
};

template <class T>
c_out<T> failed(T res, const std::string& error_msg = "") {
    c_out<T> outcome;
    outcome.success = false;
    outcome.error = error_msg;
    return outcome;
};

template <class T>
c_out<T> succeeded(T res) {
    c_out<T> outcome;
    outcome.success = true;
    outcome.result = res;
    return outcome;
};

I want to specialize them when class T is void. It works out easily for c_out:

template <>
class c_out<void> {
    public:
        bool success = false;
        std::string error = "";
};

However, I keep getting errors for the other two functions. How can I specialize them?

c_out<void> failed(const std::string& error_msg = "") {
    c_out<void> outcome;
    outcome.success = false;
    outcome.error = error_msg;
    return outcome;
};

c_out<void> succeeded(void) {
    c_out<void> outcome;
    outcome.success = true;
    return outcome;
};

Aucun commentaire:

Enregistrer un commentaire