[libcamera-devel] [PATCH] libcamera: utils: Only enable utils::hex() for integer arguments
Kieran Bingham
kieran.bingham at ideasonboard.com
Sun Jun 27 13:50:57 CEST 2021
Hi Laurent,
On 25/06/2021 22:55, Laurent Pinchart wrote:
> The utils::hex() function is defined as a function template that has
> implementations for integer arguments only. When given a different
> argument type, the compiler will not catch the issue, but linking will
> fail:
>
> src/libcamera/libcamera.so.p/camera_sensor.cpp.o: in function `libcamera::CameraSensor::validateSensorDriver()':
> camera_sensor.cpp:(.text+0x1e6b): undefined reference to `libcamera::utils::_hex libcamera::utils::hex<libcamera::ControlId const*>(libcamera::ControlId const*, unsigned int)'
>
> Move the failure to compilation time by enabling the function for
> integer arguments only. This provides better diagnostics:
>
> ../../src/libcamera/camera_sensor.cpp: In member function ‘int libcamera::CameraSensor::validateSensorDriver()’:
> ../../src/libcamera/camera_sensor.cpp:199:77: error: no matching function for call to ‘hex(const libcamera::ControlId*&)’
>
Sounds better indeed.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> include/libcamera/base/utils.h | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
> index 07685045aa05..52301254c2eb 100644
> --- a/include/libcamera/base/utils.h
> +++ b/include/libcamera/base/utils.h
> @@ -16,6 +16,7 @@
> #include <string>
> #include <string.h>
> #include <sys/time.h>
> +#include <type_traits>
> #include <utility>
> #include <vector>
>
> @@ -84,7 +85,8 @@ std::basic_ostream<char, std::char_traits<char>> &
> operator<<(std::basic_ostream<char, std::char_traits<char>> &stream, const _hex &h);
> #endif
>
> -template<typename T>
> +template<typename T,
> + std::enable_if_t<std::is_integral<T>::value> * = nullptr>
> _hex hex(T value, unsigned int width = 0);
>
> #ifndef __DOXYGEN__
>
More information about the libcamera-devel
mailing list