[{"id":22579,"web_url":"https://patchwork.libcamera.org/comment/22579/","msgid":"<Ykxt6HMEGIvmWWWi@pendragon.ideasonboard.com>","date":"2022-04-05T16:27:20","subject":"Re: [libcamera-devel] [PATCH v2 3/5] provide a default fixed-sized\n\tSpan constructor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Christian,\n\nThank you for the patch.\n\nOn Tue, Apr 05, 2022 at 01:42:13AM +0100, Christian Rauch via libcamera-devel wrote:\n> This allows to construct empty 0-fixed-sized Spans.\n> \n> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n> ---\n>  include/libcamera/base/span.h | 2 --\n>  include/libcamera/controls.h  | 2 +-\n>  2 files changed, 1 insertion(+), 3 deletions(-)\n> \n> diff --git a/include/libcamera/base/span.h b/include/libcamera/base/span.h\n> index 88d2e3de..bff4c115 100644\n> --- a/include/libcamera/base/span.h\n> +++ b/include/libcamera/base/span.h\n> @@ -105,8 +105,6 @@ public:\n> \n>  \tstatic constexpr std::size_t extent = Extent;\n> \n> -\ttemplate<bool Dependent = false,\n> -\t\t typename = std::enable_if_t<Dependent || Extent == 0>>\n\nThe issue here is that the std::span class has this constraint ([1]):\n\n    This overload participates in overload resolution only if\n    extent == 0 || extent == std::dynamic_extent.\n\n[1] https://en.cppreference.com/w/cpp/container/span/span\n\nIf we drop the constraint here, we will have an issue when switching to\nstd::span in the future. Is there a way we could achieve the result\nyou're aiming for without this change ?\n\n>  \tconstexpr Span() noexcept\n>  \t\t: data_(nullptr)\n>  \t{\n> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n> index 665bcac1..de8a7770 100644\n> --- a/include/libcamera/controls.h\n> +++ b/include/libcamera/controls.h\n> @@ -167,7 +167,7 @@ public:\n> \n>  \t\tusing V = typename T::value_type;\n>  \t\tconst V *value = reinterpret_cast<const V *>(data().data());\n> -\t\treturn { value, numElements_ };\n> +\t\treturn T{ value, numElements_ };\n>  \t}\n> \n>  #ifndef __DOXYGEN__","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 59D40C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  5 Apr 2022 16:27:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B281265642;\n\tTue,  5 Apr 2022 18:27:25 +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 36278604BB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  5 Apr 2022 18:27:24 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(117.145-247-81.adsl-dyn.isp.belgacom.be [81.247.145.117])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id AA00E5D;\n\tTue,  5 Apr 2022 18:27:23 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1649176045;\n\tbh=ER0cbFMKUa7ivStO2B3JnQXjQhitCjlVZP/KBtG8xGY=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=qWBk6WprZxXjFOM2iHO0psKYvrLowZLuDalcVasm78PP67QoGxw9Q58Qo7PZCpruA\n\ty/Vt7YEfYROqA2koDQpFA08wOF+riUSTHUMU+DSjCVIsJ3IcEhHucGLXNWNHqygzb8\n\tzAOCBihA9PrbpzK/3ml5LdZyx5GMWcwLnfIh66o9T1Hdi2lpN1AddZ9Cbj1ELcPh5T\n\tU1w8PwW5btJ7xnB90/l5Gf5Gp1pyDHvbVhcw6Ud7m5c0GDfcIoY6vY9FOzio8vbQdH\n\tTl0a+1zmxz97U+Kwlwped33R8A0nXxbArg7NxJ2/VEIe1du4l4l9GQDG3QbuR9xhsq\n\tumhG5OT4NEpdA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1649176043;\n\tbh=ER0cbFMKUa7ivStO2B3JnQXjQhitCjlVZP/KBtG8xGY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=k3YbpZ/+iXUho5X8HmCJC6NMl9YNWA86PpzB8dhyha7u9GK9i5Jn+jhCNj+lWYoAs\n\t1Tl2Hq6ggWEzP0+ftDQgUrVQNjqvzFL+jB89B8EtViZKUC7pI4qq7kBgpsKjmuNr9w\n\tItEyg9NRgWgK/KI6OFhW74mHWh3tL63ILy9qUjfM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"k3YbpZ/+\"; dkim-atps=neutral","Date":"Tue, 5 Apr 2022 19:27:20 +0300","To":"Christian Rauch <Rauch.Christian@gmx.de>","Message-ID":"<Ykxt6HMEGIvmWWWi@pendragon.ideasonboard.com>","References":"<20220405004215.86340-1-Rauch.Christian@gmx.de>\n\t<20220405004215.86340-4-Rauch.Christian@gmx.de>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220405004215.86340-4-Rauch.Christian@gmx.de>","Subject":"Re: [libcamera-devel] [PATCH v2 3/5] provide a default fixed-sized\n\tSpan constructor","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>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":22593,"web_url":"https://patchwork.libcamera.org/comment/22593/","msgid":"<c8b70367-6311-a2fb-fb65-addd6d481e5b@gmx.de>","date":"2022-04-05T23:22:07","subject":"Re: [libcamera-devel] [PATCH v2 3/5] provide a default fixed-sized\n\tSpan constructor","submitter":{"id":111,"url":"https://patchwork.libcamera.org/api/people/111/","name":"Christian Rauch","email":"Rauch.Christian@gmx.de"},"content":"Hi Laurent,\n\nIf we can only default-construct a Span that is either 0-fixed-sized or\nvariable-sized, and we want to return default-constructed objects to\nindicate errors, then it is not possible to use N-fixed-size Spans.\n\nWe either have to use a Span type that supports N-fixed-sized\ndefault-construction, or the default-construction of types has to be\navoided. If having feature/behaviour comparability with std::span is a\nhigh priority, then only the option that avoids default-construction is\nleft.\n\nBest,\nChristian\n\n\nAm 05.04.22 um 17:27 schrieb Laurent Pinchart:\n> Hi Christian,\n>\n> Thank you for the patch.\n>\n> On Tue, Apr 05, 2022 at 01:42:13AM +0100, Christian Rauch via libcamera-devel wrote:\n>> This allows to construct empty 0-fixed-sized Spans.\n>>\n>> Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>\n>> ---\n>>  include/libcamera/base/span.h | 2 --\n>>  include/libcamera/controls.h  | 2 +-\n>>  2 files changed, 1 insertion(+), 3 deletions(-)\n>>\n>> diff --git a/include/libcamera/base/span.h b/include/libcamera/base/span.h\n>> index 88d2e3de..bff4c115 100644\n>> --- a/include/libcamera/base/span.h\n>> +++ b/include/libcamera/base/span.h\n>> @@ -105,8 +105,6 @@ public:\n>>\n>>  \tstatic constexpr std::size_t extent = Extent;\n>>\n>> -\ttemplate<bool Dependent = false,\n>> -\t\t typename = std::enable_if_t<Dependent || Extent == 0>>\n>\n> The issue here is that the std::span class has this constraint ([1]):\n>\n>     This overload participates in overload resolution only if\n>     extent == 0 || extent == std::dynamic_extent.\n>\n> [1] https://en.cppreference.com/w/cpp/container/span/span\n>\n> If we drop the constraint here, we will have an issue when switching to\n> std::span in the future. Is there a way we could achieve the result\n> you're aiming for without this change ?\n>\n>>  \tconstexpr Span() noexcept\n>>  \t\t: data_(nullptr)\n>>  \t{\n>> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h\n>> index 665bcac1..de8a7770 100644\n>> --- a/include/libcamera/controls.h\n>> +++ b/include/libcamera/controls.h\n>> @@ -167,7 +167,7 @@ public:\n>>\n>>  \t\tusing V = typename T::value_type;\n>>  \t\tconst V *value = reinterpret_cast<const V *>(data().data());\n>> -\t\treturn { value, numElements_ };\n>> +\t\treturn T{ value, numElements_ };\n>>  \t}\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 96AEEC3256\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  5 Apr 2022 23:22:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BB53765644;\n\tWed,  6 Apr 2022 01:22:09 +0200 (CEST)","from mout.gmx.net (mout.gmx.net [212.227.17.22])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 772C26563F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  6 Apr 2022 01:22:08 +0200 (CEST)","from [192.168.1.209] ([92.10.251.63]) by mail.gmx.net (mrgmx105\n\t[212.227.17.168]) with ESMTPSA (Nemesis) id 1MgesG-1oC2ip3NxE-00h3CQ\n\tfor\n\t<libcamera-devel@lists.libcamera.org>; Wed, 06 Apr 2022 01:22:07 +0200"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1649200929;\n\tbh=0u13J14OWcLDS5lgocA/jtnAdu1JEBCc8abTkmu9WJ0=;\n\th=Date:Cc:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=ePMGFwt/FxijvH6fj4xjqfzcnupwIMHko/CeqBE82caySQAC/UY9CUKVBD9eO6R/e\n\tv2RVuBdP0T+ZxmLsrSQFMpJpox/2LKXAhKp2P+DH3/K7ixqDMGAimTnwRBt6MOXSN2\n\t+pUDgQldJKwkZuw3/p0rwPhXAYCsVvegFzHG4LA/HctHmQp/Un9/eFJq5uMuZ19yry\n\tEioWpOJ7yQeiHZgs6gAAm/KDip3ELdWxngDBM/E4awDeqR2trfNsJOiP0BQjCswdsQ\n\tVcFRfbpSANt8nUjFdZA5D2AWBhKS3ZQElQX96sFNSuOKl8Whf+oDCeO9eAXNmYU6X8\n\tMOfYe8ntlcKDA==","v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net;\n\ts=badeba3b8450; t=1649200928;\n\tbh=0u13J14OWcLDS5lgocA/jtnAdu1JEBCc8abTkmu9WJ0=;\n\th=X-UI-Sender-Class:Date:Subject:Cc:References:From:In-Reply-To;\n\tb=HJeTSJfrXjKCsEjpmtXnzcarfJrxB+jbfjL73vCrJq3a25s2+6cB3glNZ/QEZI7ob\n\tqxCZxdfIGNcq3UTYDTewFp8GpYoLl4epQP5LJIKbMj0VJ5F4zQuwpcJcAXcbEqKOQs\n\tetB55xW003vBPx9e9qikodEY+Lgx505kTAIPInJ4="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=gmx.net header.i=@gmx.net\n\theader.b=\"HJeTSJfr\"; dkim-atps=neutral","X-UI-Sender-Class":"01bb95c1-4bf8-414a-932a-4f6e2808ef9c","Message-ID":"<c8b70367-6311-a2fb-fb65-addd6d481e5b@gmx.de>","Date":"Wed, 6 Apr 2022 00:22:07 +0100","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.7.0","Content-Language":"en-CA","Cc":"libcamera-devel@lists.libcamera.org","References":"<20220405004215.86340-1-Rauch.Christian@gmx.de>\n\t<20220405004215.86340-4-Rauch.Christian@gmx.de>\n\t<Ykxt6HMEGIvmWWWi@pendragon.ideasonboard.com>","In-Reply-To":"<Ykxt6HMEGIvmWWWi@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"quoted-printable","X-Provags-ID":"V03:K1:R1Qh2tuLOMKqXK1WDsTPH8F74aE+HjBEjenlbylAPEN6QAOXv4V\n\tZhdhyq8Fo6pC81gJdY0jkLDngH2L2H7tlLvF+MwcBk5bbchK1kjFECrLSVgBSQa9jupr+ET\n\t6deGqbMaiYdDsIlrviozCGRitb5c6lZfIaLB22xTzQu15QZetO2xzhtoc8sg03JH8M/V0NL\n\trVpRoVIWUwvlLFReRKVhA==","X-Spam-Flag":"NO","X-UI-Out-Filterresults":"notjunk:1; V03:K0:G77LJOtAn7U=:n/Y7+bVaT0TN+fDW3Z7JE2\n\tnq7JT868GVHjAwimOhxGzDn3HZPZ3gc63pZHD8zgj4K1+KOTGnVK0DVtyht9HxRO8sr7Ge4TS\n\t7JtoX19Nhv6ccNsSqpDEBYF0CRh9GYcyrEietUciY+zeFvVenBiNnENP3Iygmy322QWTN3RQ7\n\tZPT5M3OIjA3yM3Dmc2Ilua95EjEgCKh4/F6NzlNyqL+A1Onl5chUSVFpjMZVqOkfOyhdX+uVX\n\tRpI4/Y4xJ1oZTEdvRIR9jYqiN38H339GtlKekLO1kiBBbG61RnmKi5C653otmwzEUMdCxtNpl\n\tYj4JR4pEHJRKxS7kXetSfx5KPFb/Ch4iHwJiJPADc5LBvXcLpIVqmQFaSnHSNa4wPg2P+C1ex\n\tAU7k/Pt2OM0beb67SDhNGgDsVpRWXRpk83ebpMkx/roEZm2J8dybXOA6iETRbzugt0fPun8w4\n\tUrgelf1y7om22pwiqRCXNEDaZSY4NubHnN30PKBm9FXghYnVWQwVgHkYRLZKx8tnQrsSQHkpA\n\tzOTWMD9jZyD3MaTBueQf5WdbhdVvKO/fedE5ciSY+8KmHH5uRpNWFm7qPr+5egctWsK5AOIWC\n\tEJof5O9wao3oiFHUwpJfLL6i2UsblliAXOw7poRTy9JvCHwX0WHLytXGl+k0q6nlkw+7cMQZ3\n\tbQBh5GZmnBQASKfM7mRnfS0416+TI0CG7RRRjkXYvi1rzn7ivw5g2NT5DBmgKAzcja4m9eSxm\n\trC3BbnxG2TxhqPWyQid49HqjKYJVSQFGDTpSnMkge8pQ++x/lcu/JICTSzx6gH50sdFsfhFph\n\tixb7R/GJBxYHnI5vXNc1v2SChPlYm+zkceCbmSn/x/51ZdxAg2jmRXa9yjzf8seS631eB9UlK\n\tACTbElgN+NpMa4zV3f7Fu/jdO5tjnTCNA5TwEmA07v0Z6ukCQrK/hE3HR0KPPgGVKj4R+l/lz\n\t2GIzS01i0RqaNZUVfvbB99dQOuG7iyqfLOO2W9NCeRXtaDEYukxGHTGOSVkUbVIFPHu9uqeWF\n\tTAD/J3EaQiZJ7pcDQQKrI89Rp+MH/2MqX+2wt0k7wiZiZQaSbQQVJNsMpN8RJigKioOURjMEr\n\t5Q2KwG3gTqoO1c=","Subject":"Re: [libcamera-devel] [PATCH v2 3/5] provide a default fixed-sized\n\tSpan constructor","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>","From":"Christian Rauch via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Christian Rauch <Rauch.Christian@gmx.de>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]