
Hi , I thought I'd download and try out VC8 . (Actual version at the bottom of post), however when used on my Tentative Boost quantities library, if I Use expressions on quantities at global function body scope(IOW functions not in boost::pqs namespace ) it complains that : : error C2676: binary '-' : 'const boost::pqs::t1_quantity<AbstractQuantity,Units,Value_type>' does not define this operator or a conversion to a type acceptable to the predefined operator with [ AbstractQuantity=boost::pqs::meta::components::of_velocity::type, Units=boost::pqs::meta::si_unit::none, Value_type=boost::pqs::quantity_traits::default_value_type ] (operator - is defined in same namespace as the type however.) The current workaround is just to define the operators in global namespace for this compiler( I know its not legal! but it gets around the problem). I'm wondering if anyone else has found this sort of problem in VC8.0? OTOH If there may be some reason , some two-phase lookup rule or something that is preventing these operations being found. (It seems simple to me. The types are defined in namespace boost::pqs. The operations on them are defined in boost::pqs. Whats the problem?) Note: I have tried to get the effect with other simpler types with operators defined in their own namepace, but these compile ok . regards Andy Little Heres a sample program that exhibits the problem #include <boost/pqs/t1_quantity/types/out/velocity.hpp> #include <boost/pqs/t1_quantity/types/out/mass.hpp> #include <boost/pqs/t1_quantity/types/out/force.hpp> #include <boost/pqs/t1_quantity/types/out/time.hpp> boost::pqs::force::N Func( const boost::pqs::mass::kg & mass_in, const boost::pqs::velocity::mm_div_s & initial_veloc, const boost::pqs::velocity::m_div_s & final_veloc, const boost::pqs::time::s & t ) { boost::pqs::force::N result = mass_in * (final_veloc - initial_veloc) / t; return result; } int main() { boost::pqs::mass::kg mass(2); boost::pqs::velocity::m_div_s initial_velocity(9); boost::pqs::velocity::m_div_s final_velocity(10); boost::pqs::time::s time(10); std::cout << Func(mass,initial_velocity,final_velocity,time) <<'\n'; } FWIW compler version: Microsoft Visual Studio 2005 Version 8.0.50727.42 (RTM.050727-4200) Microsoft .NET Framework Version 2.0.50727 Installed Edition: VC Express Microsoft Visual C++ 2005 76542-000-0000011-00125 Microsoft Visual C++ 2005