diff options
| author | David Blaikie <dblaikie@gmail.com> | 2014-11-12 03:28:57 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2014-11-12 03:28:57 +0000 |
| commit | e645e40ac24b42dd7768f046eee964ddc9ad1ed1 (patch) | |
| tree | 9256571e641fea52a5b30fb99d14ee8c63db8d76 /llvm | |
| parent | ada304d4ddd9b7a78d8ec4a72b6cab8a08d9bf7b (diff) | |
| download | bcm5719-llvm-e645e40ac24b42dd7768f046eee964ddc9ad1ed1.tar.gz bcm5719-llvm-e645e40ac24b42dd7768f046eee964ddc9ad1ed1.zip | |
Fix non-variadic function_ref cases to match r221753
llvm-svn: 221763
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/ADT/STLExtras.h | 20 |
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) { |

