From 5427b32a40ff4c490d81b05f8b2ca736e320e88c Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Mon, 30 Nov 2020 19:21:10 -0800 Subject: [PATCH] [wpiutil] unique_function: Restrict implicit conversion (#2899) Only implicitly convert from invocable objects. This avoids potential ambiguity in higher-level overloaded functions. --- wpiutil/src/main/native/include/wpi/FunctionExtras.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wpiutil/src/main/native/include/wpi/FunctionExtras.h b/wpiutil/src/main/native/include/wpi/FunctionExtras.h index 8e45cda0e5..57bc8dcffc 100644 --- a/wpiutil/src/main/native/include/wpi/FunctionExtras.h +++ b/wpiutil/src/main/native/include/wpi/FunctionExtras.h @@ -37,6 +37,7 @@ #include "wpi/PointerIntPair.h" #include "wpi/PointerUnion.h" #include +#include namespace wpi { @@ -237,7 +238,11 @@ public: return *this; } - template unique_function(CallableT Callable) { + template + unique_function(CallableT Callable, + std::enable_if_t< + std::is_invocable_r_v< + ReturnT, CallableT, ParamTs...>>* = nullptr) { bool IsInlineStorage = true; void *CallableAddr = getInlineStorage(); if (sizeof(CallableT) > InlineStorageSize ||