このコードを検討してください:
#include <iostream>
#include <typeinfo>
using namespace std;
template<typename T1, typename T2>
auto add(T1 l, T2 r) -> decltype(l + r){
return l + r;
}
class C {};
class B {};
class A {
public:
C operator+(const B& b) {
C c;
return c;
}
};
int main() {
// Using add()
A a;
B b;
auto c = add(a, b);
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
cout << endl;
// Doing the same thing but not on a function
A a2;
B b2;
auto c2 = a2 + b2;
cout << typeid(a2).name() << endl;
cout << typeid(b2).name() << endl;
cout << typeid(c2).name() << endl;
}
非常に簡単な質問があります。なぜ、2 番目のメソッド (を使用しないメソッド) とは異なりdecltype()
、後置の戻り値の型を挿入する必要があるのですか?add()
add()