[{"id":17822,"web_url":"https://patchwork.libcamera.org/comment/17822/","msgid":"<6b730f19-512a-7473-0d57-a264f1adab26@ideasonboard.com>","date":"2021-06-27T11:50:57","subject":"Re: [libcamera-devel] [PATCH] libcamera: utils: Only enable\n\tutils::hex() for integer arguments","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 25/06/2021 22:55, Laurent Pinchart wrote:\n> The utils::hex() function is defined as a function template that has\n> implementations for integer arguments only. When given a different\n> argument type, the compiler will not catch the issue, but linking will\n> fail:\n> \n> src/libcamera/libcamera.so.p/camera_sensor.cpp.o: in function `libcamera::CameraSensor::validateSensorDriver()':\n> camera_sensor.cpp:(.text+0x1e6b): undefined reference to `libcamera::utils::_hex libcamera::utils::hex<libcamera::ControlId const*>(libcamera::ControlId const*, unsigned int)'\n> \n> Move the failure to compilation time by enabling the function for\n> integer arguments only. This provides better diagnostics:\n> \n> ../../src/libcamera/camera_sensor.cpp: In member function ‘int libcamera::CameraSensor::validateSensorDriver()’:\n> ../../src/libcamera/camera_sensor.cpp:199:77: error: no matching function for call to ‘hex(const libcamera::ControlId*&)’\n> \n\nSounds better indeed.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  include/libcamera/base/utils.h | 4 +++-\n>  1 file changed, 3 insertions(+), 1 deletion(-)\n> \n> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h\n> index 07685045aa05..52301254c2eb 100644\n> --- a/include/libcamera/base/utils.h\n> +++ b/include/libcamera/base/utils.h\n> @@ -16,6 +16,7 @@\n>  #include <string>\n>  #include <string.h>\n>  #include <sys/time.h>\n> +#include <type_traits>\n>  #include <utility>\n>  #include <vector>\n>  \n> @@ -84,7 +85,8 @@ std::basic_ostream<char, std::char_traits<char>> &\n>  operator<<(std::basic_ostream<char, std::char_traits<char>> &stream, const _hex &h);\n>  #endif\n>  \n> -template<typename T>\n> +template<typename T,\n> +\t std::enable_if_t<std::is_integral<T>::value> * = nullptr>\n>  _hex hex(T value, unsigned int width = 0);\n>  \n>  #ifndef __DOXYGEN__\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 DEA95C321D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 27 Jun 2021 11:51:02 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2E509684D5;\n\tSun, 27 Jun 2021 13:51:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6C5F1684D0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 27 Jun 2021 13:51:00 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E26BD29B;\n\tSun, 27 Jun 2021 13:50:59 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"pNsxpd+M\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1624794660;\n\tbh=FWat81RaGekdXPtoVEoVPMuiYR4NXo3LkHUU3KhvxzM=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=pNsxpd+MLQlkpqLVHJqYPSZUTqSLZ6Ml33rcCoTj4QTzAsk20cl/97Ynarw969Y4t\n\tsKVPkFR6RmW5BL0q6Z37GQJZp7eadHvWgh61Ner+QtK+XsHuUE2PIhbgoZDz+wJUeq\n\toIXXghVez6oxQ0PBS8irDaLw/wxWehFj4YLGJ3wo=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210625215558.32615-1-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<6b730f19-512a-7473-0d57-a264f1adab26@ideasonboard.com>","Date":"Sun, 27 Jun 2021 12:50:57 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210625215558.32615-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH] libcamera: utils: Only enable\n\tutils::hex() for integer arguments","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17859,"web_url":"https://patchwork.libcamera.org/comment/17859/","msgid":"<20210628050015.GX2599@pyrite.rasen.tech>","date":"2021-06-28T05:00:15","subject":"Re: [libcamera-devel] [PATCH] libcamera: utils: Only enable\n\tutils::hex() for integer arguments","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Laurent,\n\nOn Sat, Jun 26, 2021 at 12:55:58AM +0300, Laurent Pinchart wrote:\n> The utils::hex() function is defined as a function template that has\n> implementations for integer arguments only. When given a different\n> argument type, the compiler will not catch the issue, but linking will\n> fail:\n> \n> src/libcamera/libcamera.so.p/camera_sensor.cpp.o: in function `libcamera::CameraSensor::validateSensorDriver()':\n> camera_sensor.cpp:(.text+0x1e6b): undefined reference to `libcamera::utils::_hex libcamera::utils::hex<libcamera::ControlId const*>(libcamera::ControlId const*, unsigned int)'\n> \n> Move the failure to compilation time by enabling the function for\n> integer arguments only. This provides better diagnostics:\n> \n> ../../src/libcamera/camera_sensor.cpp: In member function ‘int libcamera::CameraSensor::validateSensorDriver()’:\n> ../../src/libcamera/camera_sensor.cpp:199:77: error: no matching function for call to ‘hex(const libcamera::ControlId*&)’\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  include/libcamera/base/utils.h | 4 +++-\n>  1 file changed, 3 insertions(+), 1 deletion(-)\n> \n> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h\n> index 07685045aa05..52301254c2eb 100644\n> --- a/include/libcamera/base/utils.h\n> +++ b/include/libcamera/base/utils.h\n> @@ -16,6 +16,7 @@\n>  #include <string>\n>  #include <string.h>\n>  #include <sys/time.h>\n> +#include <type_traits>\n>  #include <utility>\n>  #include <vector>\n>  \n> @@ -84,7 +85,8 @@ std::basic_ostream<char, std::char_traits<char>> &\n>  operator<<(std::basic_ostream<char, std::char_traits<char>> &stream, const _hex &h);\n>  #endif\n>  \n> -template<typename T>\n> +template<typename T,\n> +\t std::enable_if_t<std::is_integral<T>::value> * = nullptr>\n>  _hex hex(T value, unsigned int width = 0);\n>  \n>  #ifndef __DOXYGEN__\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 0D7A9C321A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 28 Jun 2021 05:00:24 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AC7EC684D5;\n\tMon, 28 Jun 2021 07:00:23 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D68D76028C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 28 Jun 2021 07:00:22 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6B54BB8A;\n\tMon, 28 Jun 2021 07:00:21 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Mvp+DVuI\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1624856422;\n\tbh=/dF53uIarIIrfLphxt2LuiOba9mKfCMGiBu4CTTCOsk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Mvp+DVuI0ZouzQShL5M6aRC1mELju/+tEhFoF08l6SLTjUoc0fiypyPq1yZ47MHJM\n\tWJzM02ugIydY46kLhAmkgYv8hjRqOYmf6Nv3I100YW/Dhg+QIWG5N6TvRAQeENaCfU\n\tFh3u9zKKuHgx36DWJi1fhZPBS7B431FrnhNOZ8CA=","Date":"Mon, 28 Jun 2021 14:00:15 +0900","From":"paul.elder@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210628050015.GX2599@pyrite.rasen.tech>","References":"<20210625215558.32615-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20210625215558.32615-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] libcamera: utils: Only enable\n\tutils::hex() for integer arguments","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]