Only the last line fails? The only line of that which should compile is the #include.
conversion_factor return the conversion between two different units. kilometer in your example is not a unit.
#include <boost/units/systems/si/prefixes.hpp>
double mile_to_km = conversion_factor(mile(), si::kilo*si::meter);
#include <iostream> #include <boost/units/cmath.hpp> #include <boost/units/conversion.hpp> #include <boost/units/io.hpp> #include <boost/units/quantity.hpp> #include <boost/units/systems/si.hpp> #include <boost/units/systems/si/prefixes.hpp> #include <boost/units/base_units/us/mile.hpp> int main() { using namespace boost; using namespace boost::units; using namespace boost::units::si; typedef meter_base_unit ::unit_type meter_type; typedef scaled_base_unit<meter_base_unit,scale<10,static_rational<3> >
::unit_type kilometer_type; typedef us ::mile_base_unit ::unit_type mile_type;
const kilometer_type kilometer; const mile_type mile; double miles_to_kilometers = conversion_factor(mile,kilometer); double kilometers_to_miles = conversion_factor(kilometer,mile); std::cout << "1 " << mile << " = " << miles_to_kilometers << " " << kilo*meters << std::endl; std::cout << "1 " << kilometer << " = " << kilometers_to_miles << " " << mile << std::endl; quantity<si::length> q1(1.0*mile); quantity<si::length> q2(1.0*kilo*mile); quantity<meter_type> q3(1.0*mile); quantity<meter_type> q4(1.0*kilo*mile); quantity<mile_type> q5(1.0*kilometer); quantity<mile_type> q6(1.0*kilo*meter); std::cout << q1 << std::endl << q2 << std::endl << q3 << std::endl << q4 << std::endl << q5 << std::endl << q6 << std::endl; return 0; }