It doesn't compile with MSVC-2010. I managed to understand the error message now. (The error message was for the SFINAE itself, i.e. the failing substitution generated the error message.)
The fix was to write internal::has_ReturnType using techniques for very old compilers, i.e. "enum" for defining constants, and "template<typename C> before both function definitions.
Still, the original internal::has_ReturnType worked fully correctly in isolation, it only ran into problems when it was used in a sufficiently deeply nested context.