diff --git a/include/chaiscript/chaiscript_defines.hpp b/include/chaiscript/chaiscript_defines.hpp index 978a799..811b1bd 100644 --- a/include/chaiscript/chaiscript_defines.hpp +++ b/include/chaiscript/chaiscript_defines.hpp @@ -10,6 +10,9 @@ #ifdef _MSC_VER #define CHAISCRIPT_MSVC _MSC_VER #define CHAISCRIPT_HAS_DECLSPEC +#if _MSC_VER <= 1800 +#define CHAISCRIPT_MSVC_12 +#endif #endif #if defined(_WIN32) || defined(__CYGWIN__) diff --git a/include/chaiscript/dispatchkit/register_function.hpp b/include/chaiscript/dispatchkit/register_function.hpp index f476a25..fb9c35d 100644 --- a/include/chaiscript/dispatchkit/register_function.hpp +++ b/include/chaiscript/dispatchkit/register_function.hpp @@ -40,17 +40,25 @@ namespace chaiscript template std::function to_function(Ret (Class::*func)(Args...)) { +#ifdef CHAISCRIPT_MSVC_12 /// \todo this std::mem_fn wrap shouldn't be necessary but type conversions for /// std::function for member function pointers seems to be broken in MSVC return std::function(std::mem_fn(func)); +#else + return std::function(func); +#endif } template std::function to_function(Ret (Class::*func)(Args...) const) { +#ifdef CHAISCRIPT_MSVC_12 /// \todo this std::mem_fn wrap shouldn't be necessary but type conversions for /// std::function for member function pointers seems to be broken in MSVC - return std::function(std::mem_fn(func)); + return std::function(std::mem_fn(func)); +#else + return std::function(func); +#endif } template