diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-06-26 00:51:32 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-06-28 08:07:51 +0300 |
commit | d3fef998444c21142fa12b9bf698a73ee5706fd6 (patch) | |
tree | 238756e371eb7841c5e01f439d8897ca5c6ce331 | |
parent | 9fcef36be69fe2c6842680ec78c432cbdbbdc92d (diff) |
libcamera: utils: Only enable utils::hex() for integer arguments
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*&)’
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
-rw-r--r-- | include/libcamera/base/utils.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h index 07685045..52301254 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__ |