ここで簡単な例:
#include <type_traits>
int foo() {
return 2;
}
struct A {
int operator()(int&& x) {
return x*2;
}
};
int main(int, char**) {
std::result_of<A&(int)>::type x = 42;
return 0;
}
VisualStudio 2012 でコンパイルしようとすると、エラーが発生します。
error C2664: 'int A::operator ()(int &&)' : cannot convert parameter 1 from 'int' to 'int &&'
You cannot bind an lvalue to an rvalue reference
mingw-g++ で同じコードをコンパイルすると、すべて正常に動作します。独自の result_of 実現を記述する以外に、何かできることはありますか? (回避策として書きました)。