make declval arguments be references in generic/run.hpp
there doesn't appear to be a single solution for decltype involving a member operator() that works everywhere. ifdef for visual studio vs others