there doesn't appear to be a single solution for decltype involving a member operator() that works everywhere. ifdef for visual studio vs others