[Niall Douglas]
I might add that seeing as VS2012 doesn't output binaries which will execute on pre-Vista
2012 Update 3 supports XP targeting.
BTW, in your later post you mention clang won't compile the above. As clang does compile my call() test case, I take it that result_of<> in libstdc++ and libcxx are the SFINAE friendly variants you mentioned?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3462.html says: "Implementation Experience Has this been implemented yet? Yes. In c++std-lib-33002, Howard Hinnant claims that his libc++ library has already shipped a SFINAE-friendly result_of. In c++std-lib-33013, he links to his implementation. It can be found at http://llvm.org/svn/llvm-project/libcxx/trunk/include/type_traits. Daniel Krügler claimed in a private exchange to have recently implemented a SFINAE-friendly result_of for gcc. Also, Boost recently switched to a SFINAE-friendly result_of, although it hasn't shipped it yet at the time of writing (2012-09-20)."
If so then arse, because for VS2013 I'm going to have to make a special exception just for that compiler version alone to use boost::result_of<>.
You might want to do that for 2012 and earlier too, where std::result_of didn't work for movable-only arguments. STL