From 91bcaaa0379ee47f3cc7e4831a60a2a9cb1bc979 Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Mon, 23 Mar 2015 14:16:23 -0600 Subject: [PATCH] Reduce use of mem_fn when possible --- include/chaiscript/chaiscript_defines.hpp | 3 +++ include/chaiscript/dispatchkit/register_function.hpp | 10 +++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) 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 1ed8ebf..1cfa5b8 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