result typedef in generic dispatchers must only be present if the operation is valid, making it work with SFINAE. Needs testing on MSVC where decltype doesn't do SFINAE