Issues with boost.units when trying to calculate the absolute value of a vector
Hello,
I am trying to implement the MeanShift algorithm with blaze and boost.units. Everything has been working fine so far for basic matrix/vector operations, but I have just stumbled across a problem with calculating the norm of a boost.units based vector.
I the issue is with the following lines (simplified for debugging purposes):
blaze::StaticVector<boost::units::quantity<boost::units::si::length, double>, 2, blaze::columnVector> vec(
{1.0 * boost::units::si::metre, 1.0 * boost::units::si::metre});
const auto abs = blaze::norm(vec);
The Error output is as follows:
[ 8%] Building CXX object CMakeFiles/LaserCalibration.dir/maths/Maths.cpp.o
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:4:
In file included from /usr/local/include/blaze/math/DynamicMatrix.h:44:
In file included from /usr/local/include/blaze/math/DenseMatrix.h:85:
In file included from /usr/local/include/blaze/math/expressions/DMatMapExpr.h:54:
In file included from /usr/local/include/blaze/math/Functors.h:145:
/usr/local/include/blaze/math/functors/Sqrt.h:94:14: error: no matching function for call to 'sqrt'
return sqrt( a );
^~~~
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:158:35: note: in instantiation of function template specialization 'blaze::Sqrt::operator()<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >' requested here
using RT = decltype( evaluate( root( std::declval<ET>() ) ) );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:282:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, abs, power, root, Bool_t< DVecNormHelper<VT,Abs,Power>::value >() );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:309:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, SqrAbs(), Noop(), Sqrt() );
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:90:26: note: in instantiation of function template specialization 'blaze::norm<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false>' requested here
const auto abs = blaze::norm(vec);
^
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/math.h:433:15: note: candidate function not viable: no known conversion from 'const boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>' to 'double' for 1st argument
extern double sqrt(double);
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/math.h:1030:46: note: candidate function not viable: no known conversion from 'const boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>' to 'float' for 1st argument
inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __lcpp_x) _NOEXCEPT {return ::sqrtf(__lcpp_x);}
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/math.h:1031:46: note: candidate function not viable: no known conversion from 'const boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>' to 'long double' for 1st argument
inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return ::sqrtl(__lcpp_x);}
^
/usr/local/include/blaze/math/simd/Sqrt.h:66:37: note: candidate template ignored: could not match 'SIMDf32' against 'quantity'
BLAZE_ALWAYS_INLINE const SIMDfloat sqrt( const SIMDf32<T>& a ) noexcept
^
/usr/local/include/blaze/math/simd/Sqrt.h:103:38: note: candidate template ignored: could not match 'SIMDf64' against 'quantity'
BLAZE_ALWAYS_INLINE const SIMDdouble sqrt( const SIMDf64<T>& a ) noexcept
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/math.h:1037:1: note: candidate template ignored: requirement 'std::is_integral<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, boost::units::static_rational<3, 1> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::value' was not satisfied [with _A1 = boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>]
sqrt(_A1 __lcpp_x) _NOEXCEPT {return ::sqrt((double)__lcpp_x);}
^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/complex:1043:1: note: candidate template ignored: could not match 'complex' against 'quantity'
sqrt(const complex<_Tp>& __x)
^
/usr/local/include/blaze/math/proxy/Proxy.h:1308:23: note: candidate template ignored: could not match 'Proxy' against 'quantity'
inline decltype(auto) sqrt( const Proxy<PT,RT>& proxy )
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:8:
In file included from /usr/local/include/boost/units/quantity.hpp:29:
In file included from /usr/local/include/boost/units/conversion.hpp:17:
/usr/local/include/boost/units/detail/conversion_impl.hpp:340:78: error: no matching function for call to 'conversion_factor'
return(destination_type::from_value(static_cast<T2>(source.value() * conversion_factor(Unit1(), Unit2()))));
^~~~~~~~~~~~~~~~~
/usr/local/include/boost/units/quantity.hpp:193:70: note: in instantiation of member function 'boost::units::conversion_helper<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::convert' requested here
: val_(conversion_helper<quantity<Unit2,YY>,this_type>::convert(source).value())
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:166:7: note: in instantiation of function template specialization 'boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>' requested here
ET norm( power( abs( tmp[0UL] ) ) );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:282:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, abs, power, root, Bool_t< DVecNormHelper<VT,Abs,Power>::value >() );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:309:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, SqrAbs(), Noop(), Sqrt() );
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:90:26: note: in instantiation of function template specialization 'blaze::norm<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false>' requested here
const auto abs = blaze::norm(vec);
^
/usr/local/include/boost/units/conversion.hpp:177:1: note: candidate template ignored: substitution failure [with FromUnit = boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, ToUnit = boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>]: implicit instantiation of undefined template 'boost::units::detail::conversion_factor_helper<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void> >'
conversion_factor(const FromUnit&,const ToUnit&)
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:8:
In file included from /usr/local/include/boost/units/quantity.hpp:29:
In file included from /usr/local/include/boost/units/conversion.hpp:17:
In file included from /usr/local/include/boost/units/detail/conversion_impl.hpp:20:
In file included from /usr/local/include/boost/units/heterogeneous_system.hpp:34:
In file included from /usr/local/include/boost/units/static_rational.hpp:25:
/usr/local/include/boost/units/operators.hpp:63:64: error: invalid operands to binary expression ('boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>' and 'boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>')
BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, (typeof_::make<X>()+typeof_::make<Y>()))
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/usr/local/include/boost/typeof/decltype.hpp:22:34: note: expanded from macro 'BOOST_TYPEOF_NESTED_TYPEDEF_TPL'
typedef BOOST_TYPEOF_TPL(expr) type;\
^~~~
/usr/local/include/boost/typeof/decltype.hpp:17:69: note: expanded from macro 'BOOST_TYPEOF'
#define BOOST_TYPEOF(expr) boost::type_of::remove_cv_ref_t<decltype(expr)>
^~~~
/usr/local/include/boost/units/operators.hpp:64:22: note: in instantiation of member class 'boost::units::add_typeof_helper<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void> >::nested' requested here
typedef typename nested::type type;
^
/usr/local/include/boost/units/quantity.hpp:248:58: note: in instantiation of template class 'boost::units::add_typeof_helper<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void> >' requested here
BOOST_STATIC_ASSERT((boost::is_same<typename add_typeof_helper<Unit, Unit2>::type, Unit>::value));
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:170:12: note: in instantiation of function template specialization 'boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>::operator+=<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>' requested here
norm += power( abs( tmp[i ] ) ) + power( abs( tmp[i+1UL] ) ) +
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:282:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, abs, power, root, Bool_t< DVecNormHelper<VT,Abs,Power>::value >() );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:309:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, SqrAbs(), Noop(), Sqrt() );
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:90:26: note: in instantiation of function template specialization 'blaze::norm<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false>' requested here
const auto abs = blaze::norm(vec);
^
/usr/local/include/boost/units/quantity.hpp:1140:1: note: candidate template ignored: could not match 'quantity' against 'unit'
operator+(const quantity<Unit1,X>& lhs,
^
/usr/local/include/boost/units/unit.hpp:356:1: note: candidate template ignored: substitution failure [with Dim1 = boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, Dim2 = boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, System1 = boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, System2 = boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >]: no type named 'type' in 'boost::units::add_typeof_helper<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void> >'
operator+(const unit<Dim1,System1>&,const unit<Dim2,System2>&)
^
/usr/local/include/boost/units/quantity.hpp:1114:1: note: candidate function template not viable: requires single argument 'val', but 2 arguments were provided
operator+(const quantity<Unit,Y>& val)
^
/usr/local/include/boost/units/unit.hpp:330:1: note: candidate function template not viable: requires 1 argument, but 2 were provided
operator+(const unit<Dim,System>&)
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:4:
In file included from /usr/local/include/blaze/math/DynamicMatrix.h:45:
In file included from /usr/local/include/blaze/math/DynamicVector.h:45:
In file included from /usr/local/include/blaze/math/DenseVector.h:60:
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:174:12: error: no viable overloaded '+='
norm += power( abs( tmp[i] ) ) + power( abs( tmp[i+1UL] ) );
~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:282:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, abs, power, root, Bool_t< DVecNormHelper<VT,Abs,Power>::value >() );
^
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:309:11: note: in instantiation of function template specialization 'blaze::norm_backend<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false, blaze::SqrAbs, blaze::Noop, blaze::Sqrt>' requested here
return norm_backend( ~dv, SqrAbs(), Noop(), Sqrt() );
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:90:26: note: in instantiation of function template specialization 'blaze::norm<blaze::StaticVector<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>, 2, false, blaze::aligned, blaze::padded, blaze::GroupTag<0> >, false>' requested here
const auto abs = blaze::norm(vec);
^
/usr/local/include/blaze/math/simd/BasicTypes.h:1356:25: note: candidate template ignored: could not match 'SIMDPack' against 'quantity'
BLAZE_ALWAYS_INLINE T1& operator+=( SIMDPack<T1>& lhs, const SIMDPack<T2>& rhs )
^
/usr/local/include/blaze/math/proxy/Proxy.h:310:23: note: candidate template ignored: could not match 'Proxy' against 'quantity'
inline decltype(auto) operator+=( T& lhs, const Proxy<PT,RT>& rhs )
^
/usr/local/include/blaze/math/dense/DenseMatrix.h:386:13: note: candidate template ignored: could not match 'DenseMatrix' against 'quantity'
inline auto operator+=( DenseMatrix<MT,SO>& mat, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseMatrix.h:424:13: note: candidate template ignored: could not match 'DenseMatrix' against 'quantity'
inline auto operator+=( DenseMatrix<MT,SO>&& mat, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseVector.h:314:13: note: candidate template ignored: could not match 'DenseVector' against 'quantity'
inline auto operator+=( DenseVector<VT,TF>& vec, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseVector.h:350:13: note: candidate template ignored: could not match 'DenseVector' against 'quantity'
inline auto operator+=( DenseVector<VT,TF>&& vec, ST scalar )
^
/usr/local/include/boost/units/quantity.hpp:246:42: note: candidate template ignored: substitution failure [with Unit2 = boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, YY = double]
BOOST_CXX14_CONSTEXPR this_type& operator+=(const quantity<Unit2, YY>& source)
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:4:
In file included from /usr/local/include/blaze/math/DynamicMatrix.h:45:
In file included from /usr/local/include/blaze/math/DynamicVector.h:45:
In file included from /usr/local/include/blaze/math/DenseVector.h:60:
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:177:12: error: no viable overloaded '+='
norm += power( abs( tmp[i] ) );
~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/blaze/math/simd/BasicTypes.h:1356:25: note: candidate template ignored: could not match 'SIMDPack' against 'quantity'
BLAZE_ALWAYS_INLINE T1& operator+=( SIMDPack<T1>& lhs, const SIMDPack<T2>& rhs )
^
/usr/local/include/blaze/math/proxy/Proxy.h:310:23: note: candidate template ignored: could not match 'Proxy' against 'quantity'
inline decltype(auto) operator+=( T& lhs, const Proxy<PT,RT>& rhs )
^
/usr/local/include/blaze/math/dense/DenseMatrix.h:386:13: note: candidate template ignored: could not match 'DenseMatrix' against 'quantity'
inline auto operator+=( DenseMatrix<MT,SO>& mat, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseMatrix.h:424:13: note: candidate template ignored: could not match 'DenseMatrix' against 'quantity'
inline auto operator+=( DenseMatrix<MT,SO>&& mat, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseVector.h:314:13: note: candidate template ignored: could not match 'DenseVector' against 'quantity'
inline auto operator+=( DenseVector<VT,TF>& vec, ST scalar )
^
/usr/local/include/blaze/math/dense/DenseVector.h:350:13: note: candidate template ignored: could not match 'DenseVector' against 'quantity'
inline auto operator+=( DenseVector<VT,TF>&& vec, ST scalar )
^
/usr/local/include/boost/units/quantity.hpp:246:42: note: candidate template ignored: substitution failure [with Unit2 = boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<2, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, YY = double]
BOOST_CXX14_CONSTEXPR this_type& operator+=(const quantity<Unit2, YY>& source)
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:1:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.hpp:6:
In file included from /Users/dwright/projects/dv-laser-calibration/maths/CalibrationParameters.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Include.hpp:4:
In file included from /Users/dwright/projects/dv-laser-calibration/blaze-units/Dimensionless.hpp:4:
In file included from /usr/local/include/blaze/math/DynamicMatrix.h:45:
In file included from /usr/local/include/blaze/math/DynamicVector.h:45:
In file included from /usr/local/include/blaze/math/DenseVector.h:60:
/usr/local/include/blaze/math/expressions/DVecNormExpr.h:180:21: error: no matching function for call to object of type 'blaze::Sqrt'
return evaluate( root( norm ) );
^~~~
/usr/local/include/blaze/math/functors/Sqrt.h:92:61: note: candidate template ignored: substitution failure [with T = boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double>]
BLAZE_ALWAYS_INLINE BLAZE_DEVICE_CALLABLE decltype(auto) operator()( const T& a ) const
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:3:
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:81:91: warning: unused parameter 'visited' [-Wunused-parameter]
uint64_t MeanShift<DataType>::performShift(ColumnVectorX ¤tMode, std::vector<bool> &visited) {
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:40:10: warning: returning reference to local temporary object [-Wreturn-stack-address]
return blaze::column(dataPoints, sampleIndex);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:67:17: note: in instantiation of member function 'MeanShift<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::getSample' requested here
currentMode = getSample(i);
^
/Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:17:55: note: in instantiation of member function 'MeanShift<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::fit' requested here
std::tie(clusterCentres, clusterIndices) = meanShift.fit();
^
In file included from /Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:3:
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:85:11: warning: unused variable 'shift' [-Wunused-variable]
DataType shift;
^
/Users/dwright/projects/dv-laser-calibration/maths/MeanShift.hpp:69:3: note: in instantiation of member function 'MeanShift<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::performShift' requested here
performShift(currentMode, visited);
^
/Users/dwright/projects/dv-laser-calibration/maths/Maths.cpp:17:55: note: in instantiation of member function 'MeanShift<boost::units::quantity<boost::units::unit<boost::units::list<boost::units::dim<boost::units::length_base_dimension, boost::units::static_rational<1, 1> >, boost::units::dimensionless_type>, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost::units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10, static_rational<3> > >, boost::units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit, boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, boost::units::dimensionless_type> > > > > > > > > >, void>, double> >::fit' requested here
std::tie(clusterCentres, clusterIndices) = meanShift.fit();
^
3 warnings and 6 errors generated.
make[2]: *** [CMakeFiles/LaserCalibration.dir/maths/Maths.cpp.o] Error 1
make[1]: *** [CMakeFiles/LaserCalibration.dir/all] Error 2
make: *** [all] Error 2
11:51:21: The process "/usr/local/Cellar/cmake/3.17.2/bin/cmake" exited with code 2.
Error while building/deploying project LaserCalibration (kit: Imported Kit)
When executing step "CMake Build"
11:51:21: Elapsed time: 00:05.
Comments (7)
-
-
-
assigned issue to
-
assigned issue to
-
- changed status to open
-
Hi David!
Commit 06fed49 fixes the internal return type evaluation of the dense vector
norm()
computation. Unfortunately this is not enough: boost.units does not provide asqrt()
function for the computation of the square root, but instead provides aroot()
function. Since Blaze assumes asqrt()
function for all types, it is necessary to overloadsqrt()
for theboost::units::quantity
class template:namespace boost { namespace units { template< typename T > decltype(auto) sqrt( const quantity<T>& q ) { return root<2>( q ); } } // namespace units } // namespace boost
With this the
norm()
computation works flawlessly. Again, thanks for creating this defect report,Best regards,
Klaus!
-
- changed status to resolved
Commit 06fed49 fixes the return type evaluation of the dense vector norm expressions. The fix is immediately available via cloning the Blaze repository and will be officially released in Blaze 3.8.
-
reporter Hi Klaus,
thank you for your prompt response and resolution! I just pulled the latest master and will see if everything works. Also I found that boost.units provides a function
sqrt
inboost/units/cmath.hpp
.
Best,
David
-
Thanks for the information that boost.units provides a
sqrt()
function. I didn't explicitly search for it since the documentation said that it instead provides aroot()
function. That information will prove to be useful. Thanks again! - Log in to comment
Hi David!
Thanks a lot for creating this defect report. You are correct, the norm calculation does not yet work flawlessly with Blaze. We apologize for the inconvenience and promise to resolve this issue as quickly as possible. For now, please use the following expression to compute the norm:
Again, thanks for creating this defect report,
Best regards,
Klaus!