[PATCH v1] libcamera: base: bound_method: Simplify `invokePack()`
Barnabás Pőcze
barnabas.pocze at ideasonboard.com
Mon Mar 31 18:03:01 CEST 2025
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...>)
{
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_)...);
}
public:
--
2.49.0
More information about the libcamera-devel
mailing list