C++模板自动类型提升

Yuk*_*awa 2 c++ c++03

template <class T>
class Foo {
public:
    T val;
    Foo(T _v): val(_v){}
    friend ostream& operator<< (ostream& out, const Foo& A) {
        out << A.val;
        return out;
    }
};

template <class X, class Y> Foo<???> operator+(const Foo<X>& A, const Foo<Y> & B) {
    if (sizeof(X) > sizeof (Y))
        return Foo<X>(A.val + B.val);
    else
        return Foo<Y>(A.val + B.val);
}

int main() {
    Foo<double> a(1.5);
    Foo<int> b(2);
    cout << a << endl;
    cout << b << endl;
    cout << a+b << endl;
}
Run Code Online (Sandbox Code Playgroud)

我的目标是让operator+函数根据参数的类型返回不同的类型。

例如, if aisint和 b is intthen return Foo<int>,如果它们之一或两者都是doublereturn Foo<double>

有可能吗?

0x4*_*2D2 5

(C++11):declval在 dectype 中使用表达式:

#include <utility>

template <class X, class Y> 
Foo<decltype(std::declval<X>() + std::declval<Y>())> operator+(...);
Run Code Online (Sandbox Code Playgroud)