[{"id":14866,"web_url":"https://patchwork.libcamera.org/comment/14866/","msgid":"<92d39794-1ca5-db71-b5fa-d062aab3fc20@gmail.com>","date":"2021-01-31T14:42:13","subject":"Re: [libcamera-devel] [PATCH v2 2/2] Revert \"libcamera: Use helper\n\tvariable template for type traits\"","submitter":{"id":74,"url":"https://patchwork.libcamera.org/api/people/74/","name":"Jean-Michel Hautbois","email":"jeanmichel.hautbois@gmail.com"},"content":"Ahem...\n\nOn 26/01/2021 14:04, Jean-Michel Hautbois wrote:\n> This reverts commit 6cbdc2859963e17bc897a4022f1d68170477d888.\nSigned-off-by: Jean-Michel Hautbois  <jeanmichel.hautbois@ideasonboard.com>\n\n> ---\n>  include/libcamera/bound_method.h |  2 +-\n>  include/libcamera/controls.h     | 12 ++++----\n>  include/libcamera/object.h       |  2 +-\n>  include/libcamera/signal.h       |  4 +--\n>  include/libcamera/span.h         | 48 ++++++++++++++++----------------\n>  5 files changed, 34 insertions(+), 34 deletions(-)\n> \n> diff --git a/include/libcamera/bound_method.h b/include/libcamera/bound_method.h\n> index feac51da..95a95653 100644\n> --- a/include/libcamera/bound_method.h\n> +++ b/include/libcamera/bound_method.h\n> @@ -63,7 +63,7 @@ public:\n>  \t}\n>  \tvirtual ~BoundMethodBase() = default;\n>  \n> -\ttemplate<typename T, typename std::enable_if_t<!std::is_same_v<Object, T>> * = nullptr>\n> +\ttemplate<typename T, typename std::enable_if_t<!std::is_same<Object, T>::value> * = nullptr>\n>  \tbool match(T *obj) { return obj == obj_; }\n>  \tbool match(Object *object) { return object == object_; }\n>  \n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index dc549a92..3b7f3347 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -98,7 +98,7 @@ public:\n>  #ifndef __DOXYGEN__\n>  \ttemplate<typename T, typename std::enable_if_t<!details::is_span<T>::value &&\n>  \t\t\t\t\t\t       details::control_type<T>::value &&\n> -\t\t\t\t\t\t       !std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       !std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  \tControlValue(const T &value)\n>  \t\t: type_(ControlTypeNone), numElements_(0)\n> @@ -108,7 +108,7 @@ public:\n>  \t}\n>  \n>  \ttemplate<typename T, typename std::enable_if_t<details::is_span<T>::value ||\n> -\t\t\t\t\t\t       std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  #else\n>  \ttemplate<typename T>\n> @@ -142,7 +142,7 @@ public:\n>  \n>  #ifndef __DOXYGEN__\n>  \ttemplate<typename T, typename std::enable_if_t<!details::is_span<T>::value &&\n> -\t\t\t\t\t\t       !std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       !std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  \tT get() const\n>  \t{\n> @@ -153,7 +153,7 @@ public:\n>  \t}\n>  \n>  \ttemplate<typename T, typename std::enable_if_t<details::is_span<T>::value ||\n> -\t\t\t\t\t\t       std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  #else\n>  \ttemplate<typename T>\n> @@ -170,7 +170,7 @@ public:\n>  \n>  #ifndef __DOXYGEN__\n>  \ttemplate<typename T, typename std::enable_if_t<!details::is_span<T>::value &&\n> -\t\t\t\t\t\t       !std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       !std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  \tvoid set(const T &value)\n>  \t{\n> @@ -179,7 +179,7 @@ public:\n>  \t}\n>  \n>  \ttemplate<typename T, typename std::enable_if_t<details::is_span<T>::value ||\n> -\t\t\t\t\t\t       std::is_same_v<std::string, std::remove_cv_t<T>>,\n> +\t\t\t\t\t\t       std::is_same<std::string, std::remove_cv_t<T>>::value,\n>  \t\t\t\t\t\t       std::nullptr_t> = nullptr>\n>  #else\n>  \ttemplate<typename T>\n> diff --git a/include/libcamera/object.h b/include/libcamera/object.h\n> index 423208db..a1882f05 100644\n> --- a/include/libcamera/object.h\n> +++ b/include/libcamera/object.h\n> @@ -32,7 +32,7 @@ public:\n>  \tvoid postMessage(std::unique_ptr<Message> msg);\n>  \n>  \ttemplate<typename T, typename R, typename... FuncArgs, typename... Args,\n> -\t\t typename std::enable_if_t<std::is_base_of_v<Object, T>> * = nullptr>\n> +\t\t typename std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr>\n>  \tR invokeMethod(R (T::*func)(FuncArgs...), ConnectionType type,\n>  \t\t       Args... args)\n>  \t{\n> diff --git a/include/libcamera/signal.h b/include/libcamera/signal.h\n> index 46d917d5..5bcd7a77 100644\n> --- a/include/libcamera/signal.h\n> +++ b/include/libcamera/signal.h\n> @@ -44,7 +44,7 @@ public:\n>  \t}\n>  \n>  #ifndef __DOXYGEN__\n> -\ttemplate<typename T, typename R, typename std::enable_if_t<std::is_base_of_v<Object, T>> * = nullptr>\n> +\ttemplate<typename T, typename R, typename std::enable_if_t<std::is_base_of<Object, T>::value> * = nullptr>\n>  \tvoid connect(T *obj, R (T::*func)(Args...),\n>  \t\t     ConnectionType type = ConnectionTypeAuto)\n>  \t{\n> @@ -52,7 +52,7 @@ public:\n>  \t\tSignalBase::connect(new BoundMethodMember<T, void, Args...>(obj, object, func, type));\n>  \t}\n>  \n> -\ttemplate<typename T, typename R, typename std::enable_if_t<!std::is_base_of_v<Object, T>> * = nullptr>\n> +\ttemplate<typename T, typename R, typename std::enable_if_t<!std::is_base_of<Object, T>::value> * = nullptr>\n>  #else\n>  \ttemplate<typename T, typename R>\n>  #endif\n> diff --git a/include/libcamera/span.h b/include/libcamera/span.h\n> index d720adb8..91e9f974 100644\n> --- a/include/libcamera/span.h\n> +++ b/include/libcamera/span.h\n> @@ -125,8 +125,8 @@ public:\n>  \n>  \ttemplate<std::size_t N>\n>  \tconstexpr Span(element_type (&arr)[N],\n> -\t\t       std::enable_if_t<std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]> &&\n> +\t\t       std::enable_if_t<std::is_convertible<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value &&\n>  \t\t\t\t\tN == Extent,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(arr)\n> @@ -135,8 +135,8 @@ public:\n>  \n>  \ttemplate<std::size_t N>\n>  \tconstexpr Span(std::array<value_type, N> &arr,\n> -\t\t       std::enable_if_t<std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]> &&\n> +\t\t       std::enable_if_t<std::is_convertible<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value &&\n>  \t\t\t\t\tN == Extent,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(arr.data())\n> @@ -145,8 +145,8 @@ public:\n>  \n>  \ttemplate<std::size_t N>\n>  \tconstexpr Span(const std::array<value_type, N> &arr,\n> -\t\t       std::enable_if_t<std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]> &&\n> +\t\t       std::enable_if_t<std::is_convertible<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value &&\n>  \t\t\t\t\tN == Extent,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(arr.data())\n> @@ -157,9 +157,9 @@ public:\n>  \texplicit constexpr Span(Container &cont,\n>  \t\t\t\tstd::enable_if_t<!details::is_span<Container>::value &&\n>  \t\t\t\t\t\t !details::is_array<Container>::value &&\n> -\t\t\t\t\t\t !std::is_array_v<Container> &&\n> -\t\t\t\t\t\t std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> -\t\t\t\t\t\t\t\t       element_type (*)[]>,\n> +\t\t\t\t\t\t !std::is_array<Container>::value &&\n> +\t\t\t\t\t\t std::is_convertible<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> +\t\t\t\t\t\t\t\t     element_type (*)[]>::value,\n>  \t\t\t\t\t\t std::nullptr_t> = nullptr)\n>  \t\t: data_(utils::data(cont))\n>  \t{\n> @@ -169,9 +169,9 @@ public:\n>  \texplicit constexpr Span(const Container &cont,\n>  \t\t\t\tstd::enable_if_t<!details::is_span<Container>::value &&\n>  \t\t\t\t\t\t !details::is_array<Container>::value &&\n> -\t\t\t\t\t\t !std::is_array_v<Container> &&\n> -\t\t\t\t\t\t std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> -\t\t\t\t\t\t\t\t       element_type (*)[]>,\n> +\t\t\t\t\t\t !std::is_array<Container>::value &&\n> +\t\t\t\t\t\t std::is_convertible<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> +\t\t\t\t\t\t\t\t     element_type (*)[]>::value,\n>  \t\t\t\t\t\t std::nullptr_t> = nullptr)\n>  \t\t: data_(utils::data(cont))\n>  \t{\n> @@ -180,7 +180,7 @@ public:\n>  \n>  \ttemplate<class U, std::size_t N>\n>  \texplicit constexpr Span(const Span<U, N> &s,\n> -\t\t\t\tstd::enable_if_t<std::is_convertible_v<U (*)[], element_type (*)[]> &&\n> +\t\t\t\tstd::enable_if_t<std::is_convertible<U (*)[], element_type (*)[]>::value &&\n>  \t\t\t\t\t\t N == Extent,\n>  \t\t\t\t\t\t std::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(s.data())\n> @@ -293,8 +293,8 @@ public:\n>  \n>  \ttemplate<std::size_t N>\n>  \tconstexpr Span(element_type (&arr)[N],\n> -\t\t       std::enable_if_t<std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]>,\n> +\t\t       std::enable_if_t<std::is_convertible<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(arr), size_(N)\n>  \t{\n> @@ -302,8 +302,8 @@ public:\n>  \n>  \ttemplate<std::size_t N>\n>  \tconstexpr Span(std::array<value_type, N> &arr,\n> -\t\t       std::enable_if_t<std::is_convertible_v<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]>,\n> +\t\t       std::enable_if_t<std::is_convertible<std::remove_pointer_t<decltype(utils::data(arr))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(utils::data(arr)), size_(N)\n>  \t{\n> @@ -319,9 +319,9 @@ public:\n>  \tconstexpr Span(Container &cont,\n>  \t\t       std::enable_if_t<!details::is_span<Container>::value &&\n>  \t\t\t\t\t!details::is_array<Container>::value &&\n> -\t\t\t\t\t!std::is_array_v<Container> &&\n> -\t\t\t\t\tstd::is_convertible_v<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]>,\n> +\t\t\t\t\t!std::is_array<Container>::value &&\n> +\t\t\t\t\tstd::is_convertible<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr)\n>  \t\t: data_(utils::data(cont)), size_(utils::size(cont))\n>  \t{\n> @@ -331,9 +331,9 @@ public:\n>  \tconstexpr Span(const Container &cont,\n>  \t\t       std::enable_if_t<!details::is_span<Container>::value &&\n>  \t\t\t\t\t!details::is_array<Container>::value &&\n> -\t\t\t\t\t!std::is_array_v<Container> &&\n> -\t\t\t\t\tstd::is_convertible_v<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> -\t\t\t\t\t\t\t      element_type (*)[]>,\n> +\t\t\t\t\t!std::is_array<Container>::value &&\n> +\t\t\t\t\tstd::is_convertible<std::remove_pointer_t<decltype(utils::data(cont))> (*)[],\n> +\t\t\t\t\t\t\t    element_type (*)[]>::value,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr)\n>  \t\t: data_(utils::data(cont)), size_(utils::size(cont))\n>  \t{\n> @@ -341,7 +341,7 @@ public:\n>  \n>  \ttemplate<class U, std::size_t N>\n>  \tconstexpr Span(const Span<U, N> &s,\n> -\t\t       std::enable_if_t<std::is_convertible_v<U (*)[], element_type (*)[]>,\n> +\t\t       std::enable_if_t<std::is_convertible<U (*)[], element_type (*)[]>::value,\n>  \t\t\t\t\tstd::nullptr_t> = nullptr) noexcept\n>  \t\t: data_(s.data()), size_(s.size())\n>  \t{\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 7502BC33BB\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 31 Jan 2021 14:42:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4151F683D3;\n\tSun, 31 Jan 2021 15:42:17 +0100 (CET)","from mail-wm1-x334.google.com (mail-wm1-x334.google.com\n\t[IPv6:2a00:1450:4864:20::334])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5D35068383\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 31 Jan 2021 15:42:15 +0100 (CET)","by mail-wm1-x334.google.com with SMTP id e15so10987375wme.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 31 Jan 2021 06:42:15 -0800 (PST)","from ?IPv6:2a01:e0a:169:7140:7f92:560f:391a:d89?\n\t([2a01:e0a:169:7140:7f92:560f:391a:d89])\n\tby smtp.gmail.com with ESMTPSA id\n\tm22sm23300273wrh.66.2021.01.31.06.42.13\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tSun, 31 Jan 2021 06:42:13 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"NzL91o4w\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=subject:to:references:from:message-id:date:user-agent:mime-version\n\t:in-reply-to:content-language:content-transfer-encoding;\n\tbh=24QEhTEEU6OfWPnfce+bu2Ub5NFhWR1uha/MHdQNfKw=;\n\tb=NzL91o4wse+/m4nTMoki5+HXizODBSS7N63AKsOe4AEgadH0A7k9G9tF+MEKF/C/mt\n\trYSq3toBe+SgWNcIDWgSa/rTmXeDD8ML3+6aPiaBGplrIIpTHSQzb0YWnWNDrp3Y4NMk\n\ty72qEHxaoeT0eSHYXpqE+JPdQ9zF8ZKNRCRw4xxtoEqDY8ikF4N5smaiYPBc8EN5rIHj\n\tS7tAvn8znHwrRyGmQ/8Hn6b24dGM/uquLxY7lcUwl2MnGKyIglw9cCKo7n82ihFo0Ptt\n\tULk1i6gjP3St/KINvVtYOwSK0k64evjfj22G4K0n0xrDB35ZvIWHHu1xePGp+y0Uckkx\n\t7vgg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:subject:to:references:from:message-id:date\n\t:user-agent:mime-version:in-reply-to:content-language\n\t:content-transfer-encoding;\n\tbh=24QEhTEEU6OfWPnfce+bu2Ub5NFhWR1uha/MHdQNfKw=;\n\tb=PpURFTCqj4sYeSi/mtpjzy531Q5c0ewoaxprYS1+gbq7wXUIEl2nEqu63Fe7QY52N6\n\tYrmAp2T/0KWW7jUMHtHXaFfKavIdpQF1/tXTDpQCWlewmoiCgyvEZiV7lVLxqpvFJS1p\n\tb4VDc3/ErGXrl0cwp6HivSaL4Po43kKF/np1IFYEybU5Ih2WPOSKtDz43XM9UzxtPYwn\n\teOQLvSX/lAn3q528EtHqLo1A3uji8h6yeHK/0xlDB6Ebz8jJw4FzYMNXHTyElMAC0lOk\n\t9sQclKiLVbmKegK4cK9N0P6ymGOqCrmLORw2MW/qgROnQWdfNi4PePX0jFjgKue01hTT\n\tcKaw==","X-Gm-Message-State":"AOAM531wlLsFCWBtF9fhSfQqwAr5Hpwzn3JQHjSeaa8M8vEY81TuuJ0m\n\tW9cks/bfOP+2lr06YQKLzRI8A5fFrpNRBw==","X-Google-Smtp-Source":"ABdhPJyaZ+z41CCj6tOl8IspTQa8y6iKjNyE6DO6zCvtfdCAAr8IVeHvS5AgnYmGmRhe1Q1TedCq/g==","X-Received":"by 2002:a1c:2783:: with SMTP id\n\tn125mr11389778wmn.74.1612104134583; \n\tSun, 31 Jan 2021 06:42:14 -0800 (PST)","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210126130415.26849-1-jeanmichel.hautbois@ideasonboard.com>\n\t<20210126130415.26849-3-jeanmichel.hautbois@ideasonboard.com>","From":"Jean-Michel Hautbois <jeanmichel.hautbois@gmail.com>","Message-ID":"<92d39794-1ca5-db71-b5fa-d062aab3fc20@gmail.com>","Date":"Sun, 31 Jan 2021 15:42:13 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.6.1","MIME-Version":"1.0","In-Reply-To":"<20210126130415.26849-3-jeanmichel.hautbois@ideasonboard.com>","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v2 2/2] Revert \"libcamera: Use helper\n\tvariable template for type traits\"","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]