diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h
index 686bf68..ffb4893 100644
--- a/include/pybind11/cast.h
+++ b/include/pybind11/cast.h
@@ -225,6 +225,7 @@
     typename std::add_pointer<typename intrinsic_type<T>::type>::type,
     typename std::add_lvalue_reference<typename intrinsic_type<T>::type>::type>::type;
 
+
 /// Generic type caster for objects stored on the heap
 template <typename type> class type_caster_base : public type_caster_generic {
 public:
@@ -247,22 +248,35 @@
     static handle cast(const type *src, return_value_policy policy, handle parent) {
         return type_caster_generic::cast(
             src, policy, parent, src ? &typeid(*src) : nullptr, &typeid(type),
-            &copy_constructor, &move_constructor);
+            make_copy_constructor(src), make_move_constructor(src));
     }
 
     template <typename T> using cast_op_type = pybind11::detail::cast_op_type<T>;
 
     operator type*() { return (type *) value; }
     operator type&() { return *((type *) value); }
+
 protected:
-    template <typename T = type, typename std::enable_if<detail::is_copy_constructible<T>::value, int>::type = 0>
-    static void *copy_constructor(const void *arg) { return (void *) new type(*((const type *) arg)); }
-    template <typename T = type, typename std::enable_if<!detail::is_copy_constructible<T>::value, int>::type = 0>
-    static void *copy_constructor(const void *) { return nullptr; }
-    template <typename T = type, typename std::enable_if<detail::is_move_constructible<T>::value, int>::type = 0>
-    static void *move_constructor(const void *arg) { return (void *) new type(std::move(*((type *) arg))); }
-    template <typename T = type, typename std::enable_if<!detail::is_move_constructible<T>::value, int>::type = 0>
-    static void *move_constructor(const void *) { return nullptr; }
+    typedef void *(*Constructor)(const void *stream);
+#if !defined(_MSC_VER)
+    /* Only enabled when the types are {copy,move}-constructible *and* when the type
+       does not have a private operator new implementaton. */
+    template <typename T = type> static auto make_copy_constructor(const T *value) -> decltype(new T(*value), Constructor(nullptr)) {
+        return [](const void *arg) -> void * { return new T(*((const T *) arg)); }; }
+    template <typename T = type> static auto make_move_constructor(const T *value) -> decltype(new T(std::move(*((T *) value))), Constructor(nullptr)) {
+        return [](const void *arg) -> void * { return (void *) new T(std::move(*((T *) arg))); }; }
+#else
+    /* Visual Studio 2015's SFINAE implementation doesn't yet handle the above robustly in all situations.
+       Use a workaround that only tests for constructibility for now. */
+    template <typename T = type, typename = typename std::enable_if<std::is_copy_constructible<T>::value>::type>
+    static Constructor make_copy_constructor(const T *value) {
+        return [](const void *arg) -> void * { return new T(*((const T *)arg)); }; }
+    template <typename T = type, typename = typename std::enable_if<std::is_move_constructible<T>::value>::type>
+    static Constructor make_move_constructor(const T *value) {
+        return [](const void *arg) -> void * { return (void *) new T(std::move(*((T *)arg))); }; }
+#endif
+    static Constructor make_copy_constructor(...) { return nullptr; }
+    static Constructor make_move_constructor(...) { return nullptr; }
 };
 
 template <typename type, typename SFINAE = void> class type_caster : public type_caster_base<type> { };
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index 91de749..a82bb0e 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -293,20 +293,6 @@
 template <typename T, size_t N> struct intrinsic_type<const T[N]> { typedef typename intrinsic_type<T>::type type; };
 template <typename T, size_t N> struct intrinsic_type<T[N]>       { typedef typename intrinsic_type<T>::type type; };
 
-/** \brief SFINAE helper class to check if a copy constructor is usable (in contrast to
- * std::is_copy_constructible, this class also checks if the 'new' operator is accessible */
-template <typename T>  struct is_copy_constructible {
-    template <typename T2> static std::true_type test(decltype(new T2(std::declval<typename std::add_lvalue_reference<T2>::type>())) *);
-    template <typename T2> static std::false_type test(...);
-    static const bool value = std::is_same<std::true_type, decltype(test<T>(nullptr))>::value;
-};
-
-template <typename T>  struct is_move_constructible {
-    template <typename T2> static std::true_type test(decltype(new T2(std::declval<T2>())) *);
-    template <typename T2> static std::false_type test(...);
-    static const bool value = std::is_same<std::true_type, decltype(test<T>(nullptr))>::value;
-};
-
 /// Helper type to replace 'void' in some expressions
 struct void_type { };
 
