On Mon, Mar 7, 2011 at 5:35 PM, Matthias Schabel <boost@schabel-family.org> wrote: 
    // takes any unit of length
    template<class System>
    void setX(quantity<unit<length_dimension,System> > const& x) {
      // explicit conversion to si::length = meters
      m_X = quantity<si::length>(x);
    }
 
Is the following set of statements correct.  si::length has a length_dimension and is part of the si::system.  boost::units::si::meter_base_unit::unit_type has a length_dimension and is part of the si::system.  boost::units::us::foot_base_unit::unit_type has a length_dimension and is part of the us system.
 
Since an explicit conversion is needed I definitely don't understand the differences between the following three statements.  I've included examples to show my limited understanding.
 
  • implicit conversion of quantity<Unit,Y> to quantity<Unit,Z> is allowed if Y and Z are implicitly convertible.  
  •  
    quantity<si::length, int> to quantity<si::length, double>
     
  • explicit conversion between quantity<Unit1,Y> and quantity<Unit2,Z> is allowed if Unit1 and Unit2 have the same dimensions and if Y and Z are implicitly convertible.
  •  
    quantity<us::foot_base_unit::unit_type, int> to quantity<si::length, double>
    Both have the same length dimension.
     
  • implicit conversion between quantity<Unit1,Y> and quantity<Unit2,Z> is allowed if Unit1 reduces to exactly the same combination of base units as Unit2 and if Y and Z are convertible.
  •  
    I'm not sure on the example for this one.
     
    Ryan