build: fix clang-tidy
Fixed a clang-tidy error that occurred when integrating MantleAPI v18 into road logic suite. In the RLS repo a clang-tidy check is run in the pipeline. This is the error:
14:13:17 Found compiler error(s).
14:13:17 external/_main~non_module_dependencies~units_nhh/include/units.h:1620:17: error: static assertion failed due to requirement 'traits::is_convertible_unit<units::unit<std::ratio<1, 1>, units::base_unit<std::ratio<1, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>>, std::ratio<0, 1>, std::ratio<0, 1>>, units::unit<std::ratio<1, 1>, units::base_unit<std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<1, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>, std::ratio<0, 1>>, std::ratio<0, 1>, std::ratio<0, 1>>>::value': Units are not compatible. [clang-diagnostic-error]
14:13:17 1620 | static_assert(traits::is_convertible_unit<UnitFrom, UnitTo>::value, "Units are not compatible.");
14:13:17 | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14:13:17 external/_main~non_module_dependencies~units_nhh/include/units.h:1956:14: note: in instantiation of function template specialization 'units::convert<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>, units::unit<std::ratio<1>, units::base_unit<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>>>, double>' requested here
14:13:17 1956 | nls(units::convert<UnitsRhs, Units, T>(rhs.m_value), std::true_type() /*store linear value*/)
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:801:36: note: in instantiation of function template specialization 'units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<0>, std::ratio<0>, std::ratio<0>, std::ratio<1>>>>::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>, double, units::linear_scale>' requested here
14:13:17 801 | void_t<decltype(_Arr<_Ti>{{std::declval<_Tp>()}})>>
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:813:7: note: during template argument deduction for class template partial specialization '_Build_FUN<_Ind, _Tp, _Ti, void_t<decltype(_Arr<_Ti>{{std::declval<_Tp>()}})>>' [with _Ind = 2, _Tp = const units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>> &, _Ti = mantle_api::LatLonPosition]
14:13:17 813 | : _Build_FUN<_Ind, _Tp, _Ti>...
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:813:7: note: in instantiation of template class 'std::__detail::__variant::_Build_FUN<2, const units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>> &, mantle_api::LatLonPosition>' requested here
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:822:18: note: in instantiation of template class 'std::__detail::__variant::_Build_FUNs<const units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>> &, std::variant<mantle_api::OpenDriveRoadPosition, mantle_api::OpenDriveLanePosition, mantle_api::LatLonPosition, mantle_api::Vec3<units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>>>>>' requested here
14:13:17 822 | = decltype(_Build_FUNs<_Tp, _Variant>::_S_fun(std::declval<_Tp>()));
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:831:44: note: (skipping 1 context in backtrace; use -ftemplate-backtrace-limit=0 to see all)
14:13:17 831 | __accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>>
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:1401:27: note: during template argument deduction for variable template partial specialization '__accepted_index<_Tp, _Variant, void_t<_FUN_type<_Tp, _Variant>>>' [with _Tp = const units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>> &, _Variant = std::variant<mantle_api::OpenDriveRoadPosition, mantle_api::OpenDriveLanePosition, mantle_api::LatLonPosition, mantle_api::Vec3<units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>>>>]
14:13:17 1401 | = __detail::__variant::__accepted_index<_Tp, variant>;
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:1407:36: note: in instantiation of static data member 'std::variant<mantle_api::OpenDriveRoadPosition, mantle_api::OpenDriveLanePosition, mantle_api::LatLonPosition, mantle_api::Vec3<units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>>>>::__accepted_index<const units::unit_t<units::unit<std::ratio<1>, units::base_unit<std::ratio<1>>>> &>' requested here
14:13:17 1407 | using __accepted_type = __to_type<__accepted_index<_Tp>>;
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:1437:24: note: in instantiation of template type alias '__accepted_type' requested here
14:13:17 1437 | typename _Tj = __accepted_type<_Tp&&>,
14:13:17 | ^
14:13:17 /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/variant:1441:2: note: in instantiation of default argument for 'variant<const units::length::meter_t &, enable_if_t<sizeof...(_Types) != 0>, enable_if_t<__not_in_place_tag<const units::length::meter_t &>>>' required here
14:13:17 1441 | variant(_Tp&& __t)
14:13:17 | ^~~~~~~~~~~~~~~~~~
14:13:17 1442 | noexcept(is_nothrow_constructible_v<_Tj, _Tp>)
14:13:17 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14:13:17 1443 | : variant(in_place_index<__accepted_index<_Tp>>,
14:13:17 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14:13:17 1444 | std::forward<_Tp>(__t))
14:13:17 | ~~~~~~~~~~~~~~~~~~~~~~~
14:13:17 1445 | { }
14:13:17 | ~~~
14:13:17 external/_main~non_module_dependencies~mantle_api/include/MantleAPI/Common/dimension.h:64:44: note: while substituting deduced template arguments into function template 'variant' [with _Tp = const units::length::meter_t &, $1 = (no value), $2 = (no value), _Tj = (no value), $4 = (no value)]
14:13:17 64 | os << "Dimension3(.length=" << dimension.length << ", .width=" << dimension.width << ", .height=" << dimension.height << ')';
14:13:17 | ^
For me it was not obvious how mantle_api::Dimension3d is related to mantle_api::Position and why the conversion for the other operator<<() where units::length:meter_t is used don't result in an error. Therefore fixed by a workaround.