summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2014-11-12 03:28:57 +0000
committerDavid Blaikie <dblaikie@gmail.com>2014-11-12 03:28:57 +0000
commite645e40ac24b42dd7768f046eee964ddc9ad1ed1 (patch)
tree9256571e641fea52a5b30fb99d14ee8c63db8d76
parentada304d4ddd9b7a78d8ec4a72b6cab8a08d9bf7b (diff)
downloadbcm5719-llvm-e645e40ac24b42dd7768f046eee964ddc9ad1ed1.tar.gz
bcm5719-llvm-e645e40ac24b42dd7768f046eee964ddc9ad1ed1.zip
Fix non-variadic function_ref cases to match r221753
llvm-svn: 221763
-rw-r--r--llvm/include/llvm/ADT/STLExtras.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 16f850c0f57..4e56e4d7447 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -103,7 +103,10 @@ class function_ref<Ret()> {
public:
template<typename Callable>
- function_ref(Callable &&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()() const { return callback(callable); }
@@ -122,7 +125,10 @@ class function_ref<Ret(Param1)> {
public:
template<typename Callable>
- function_ref(Callable &&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()(Param1 param1) {
@@ -144,7 +150,10 @@ class function_ref<Ret(Param1, Param2)> {
public:
template<typename Callable>
- function_ref(Callable &&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()(Param1 param1, Param2 param2) {
@@ -170,7 +179,10 @@ class function_ref<Ret(Param1, Param2, Param3)> {
public:
template<typename Callable>
- function_ref(Callable &&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()(Param1 param1, Param2 param2, Param3 param3) {
OpenPOWER on IntegriCloud