Ensure function_refs are copyable even from non-const references
[oota-llvm.git] / include / llvm / ADT / STLExtras.h
index f69a15bdc255061205bf3180c3c3364db04c28d7..16f850c0f570525a88b6443462446a07d6a73df5 100644 (file)
@@ -77,8 +77,11 @@ class function_ref<Ret(Params...)> {
   }
 
 public:
-  template<typename Callable>
-  function_ref(Callable &&callable)
+  template <typename Callable>
+  function_ref(Callable &&callable,
+               typename std::enable_if<
+                   !std::is_same<typename std::remove_reference<Callable>::type,
+                                 function_ref>::value>::type * = nullptr)
       : callback(callback_fn<typename std::remove_reference<Callable>::type>),
         callable(reinterpret_cast<intptr_t>(&callable)) {}
   Ret operator()(Params ...params) const {