diff --git a/BaseLib/Functional.h b/BaseLib/Functional.h
index 12164e9b912089dd4e7d6d354a1972b2574f980b..daa1c0483ec4658d1c24d9b2e8f3b62fa12ec3c5 100644
--- a/BaseLib/Functional.h
+++ b/BaseLib/Functional.h
@@ -169,11 +169,14 @@ struct FunctionTraits<ReturnType (Object::*)(Args...) const> {
  * This is in contrast to the behaviour of std::bind, and has been chosen in
  * order to prevent accidental copies.
  */
-template <typename Object, typename ReturnType, typename... Args>
-std::function<ReturnType(Args...)> easyBind(
-    ReturnType (std::remove_pointer<typename std::decay<Object>::type>::type::*
-                    method)(Args...),
-    Object&& obj)
+template <typename Object, typename MethodClass, typename ReturnType,
+          typename... Args>
+typename std::enable_if<
+    std::is_same<MethodClass,
+                 typename std::remove_cv<typename std::remove_pointer<
+                     typename std::decay<Object>::type>::type>::type>::value,
+    std::function<ReturnType(Args...)>>::type
+easyBind(ReturnType (MethodClass::*method)(Args...), Object&& obj)
 {
     return detail::easyBind_inner(
         method, std::forward<Object>(obj),
@@ -181,11 +184,14 @@ std::function<ReturnType(Args...)> easyBind(
 }
 
 //! \overload
-template <typename Object, typename ReturnType, typename... Args>
-std::function<ReturnType(Args...)> easyBind(
-    ReturnType (std::remove_pointer<typename std::decay<Object>::type>::type::*
-                    method)(Args...) const,
-    Object&& obj)
+template <typename Object, typename MethodClass, typename ReturnType,
+          typename... Args>
+typename std::enable_if<
+    std::is_same<MethodClass,
+                 typename std::remove_cv<typename std::remove_pointer<
+                     typename std::decay<Object>::type>::type>::type>::value,
+    std::function<ReturnType(Args...)>>::type
+easyBind(ReturnType (MethodClass::*method)(Args...) const, Object&& obj)
 {
     return detail::easyBind_inner(
         method, std::forward<Object>(obj),