案2: typeofなどの機能を導入してオーバーロード解決の機構を
テンプレートから活用できるようにする
template <class U>
struct plus_traits<std::complex<int>, U> {
    static std::complex<int>
    plus(const std::complex<int> &a1, int a2)
    { ... }
    static std::complex<double>
    plus(const std::complex<int> &a1, double a2)
    { ... }

    typedef typeof(plus(const std::complex<int> &, U)) result_type;
};
実現性がどの程度なのかは分からんけど、可能ならテンプレートの力はかなり増す。