From 4e7b4bab79be8cf2de9af242e5cd23347fba8bb2 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Wed, 6 Apr 2022 22:19:10 -0400
Subject: DRTVWR-558: Generalize LLEventDispatcher::add() constraints.

Instead of checking whether an add() parameter is exactly LLSD or LLSDMap,
check whether it's convertible to LLSD -- which handles those cases and more.

(cherry picked from commit fa168c11f64771dadc5df86d14ca2f07eba3b8ba)
---
 indra/llcommon/lleventdispatcher.h | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
index f1e4fe2df7..1b3e834aeb 100644
--- a/indra/llcommon/lleventdispatcher.h
+++ b/indra/llcommon/lleventdispatcher.h
@@ -192,8 +192,7 @@ public:
     template<typename Method, typename InstanceGetter>
     typename std::enable_if<
         boost::function_types::is_member_function_pointer<Method>::value &&
-        ! std::is_same<InstanceGetter, LLSD>::value &&
-        ! std::is_same<InstanceGetter, LLSDMap>::value
+        ! std::is_convertible<InstanceGetter, LLSD>::value
         >::type add(const std::string& name,
                     const std::string& desc,
                     Method f,
@@ -247,8 +246,7 @@ public:
     template<typename Method, typename InstanceGetter>
     typename std::enable_if<
         boost::function_types::is_member_function_pointer<Method>::value &&
-        ! std::is_same<InstanceGetter, LLSD>::value &&
-        ! std::is_same<InstanceGetter, LLSDMap>::value
+        ! std::is_convertible<InstanceGetter, LLSD>::value
         >::type add(const std::string& name,
                     const std::string& desc,
                     Method f,
@@ -492,8 +490,7 @@ LLEventDispatcher::add(const std::string& name, const std::string& desc, Functio
 template<typename Method, typename InstanceGetter>
 typename std::enable_if<
     boost::function_types::is_member_function_pointer<Method>::value &&
-    ! std::is_same<InstanceGetter, LLSD>::value &&
-    ! std::is_same<InstanceGetter, LLSDMap>::value
+    ! std::is_convertible<InstanceGetter, LLSD>::value
 >::type
 LLEventDispatcher::add(const std::string& name, const std::string& desc, Method f,
                        const InstanceGetter& getter)
@@ -516,8 +513,7 @@ LLEventDispatcher::add(const std::string& name, const std::string& desc, Functio
 template<typename Method, typename InstanceGetter>
 typename std::enable_if<
     boost::function_types::is_member_function_pointer<Method>::value &&
-    ! std::is_same<InstanceGetter, LLSD>::value &&
-    ! std::is_same<InstanceGetter, LLSDMap>::value
+    ! std::is_convertible<InstanceGetter, LLSD>::value
 >::type
 LLEventDispatcher::add(const std::string& name, const std::string& desc, Method f,
                        const InstanceGetter& getter,
-- 
cgit v1.2.3