Is there an error type in C++?
===

Consider following types

    template <typename T1, typename T2, typename T3>
    struct either_or
    {
        /* Here I need such an error type that says "Sorry, T1 is not an accepting type." */
        typdef error<T1> type;
    };
    template <typename T1, typename T3>
    struct either_or <T1, T1, T3>
    {
        typedef T1 type; //T1 Ok
    };
    template <typename T1, typename T2>
    struct either_or <T1, T2, T1>
    {
        typedef T1 type; //T1 Ok
    };

    /* Here is function that might accept error type variable */

    template <typename T>
    void foo(typename either_or<T, char, unsigned char>::type x)
    {
        /*print char or unsigned char except that T is not printable*/
    }

Is there an error type in type system of C++ to use in this case? If there isn't, can I realize it or how?