[PATCH v1] libcamera: base: bound_method: Simplify `invokePack()`
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Mar 31 18:58:31 CEST 2025
Quoting Laurent Pinchart (2025-03-31 17:21:58)
> Hi Barnabás,
>
> Thank you for the patch.
>
> On Mon, Mar 31, 2025 at 06:03:01PM +0200, Barnabás Pőcze wrote:
> > Use `if constexpr` instead of SFINAE to handle return values of type `void`.
> >
> > Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
> > ---
> > include/libcamera/base/bound_method.h | 17 ++++++-----------
> > 1 file changed, 6 insertions(+), 11 deletions(-)
> >
> > diff --git a/include/libcamera/base/bound_method.h b/include/libcamera/base/bound_method.h
> > index dd3488eeb..aad75c02a 100644
> > --- a/include/libcamera/base/bound_method.h
> > +++ b/include/libcamera/base/bound_method.h
> > @@ -98,21 +98,16 @@ public:
> > using PackType = BoundMethodPack<R, Args...>;
> >
> > private:
> > - template<std::size_t... I, typename T = R>
> > - std::enable_if_t<!std::is_void<T>::value, void>
> > + template<std::size_t... I>
> > + void
> > invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)
>
> You can write
>
> template<std::size_t... I>
> void invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)
>
> > {
> > PackType *args = static_cast<PackType *>(pack);
> > - args->ret_ = invoke(std::get<I>(args->args_)...);
> > - }
> >
> > - template<std::size_t... I, typename T = R>
> > - std::enable_if_t<std::is_void<T>::value, void>
> > - invokePack(BoundMethodPackBase *pack, std::index_sequence<I...>)
> > - {
> > - /* args is effectively unused when the sequence I is empty. */
> > - PackType *args [[gnu::unused]] = static_cast<PackType *>(pack);
> > - invoke(std::get<I>(args->args_)...);
> > + if constexpr (!std::is_void_v<R>)
> > + args->ret_ = invoke(std::get<I>(args->args_)...);
> > + else
> > + invoke(std::get<I>(args->args_)...);
>
> I'm surprised that this works. I didn't know that within a templated
> entity the discarded statement is not instantiated. It's interesting.
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
No chance of me putting a reviewed by tag on template magic - it would
be a lie ;-)
But if Laurent's happy with this - and the CI passes, I'm fine to merge
it...
Acked-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > }
> >
> > public:
>
> --
> Regards,
>
> Laurent Pinchart
More information about the libcamera-devel
mailing list