Boost logo

Boost :

From: Andy Little (andy_at_[hidden])
Date: 2004-01-25 20:07:47

"Daniel Frey" <d.frey_at_[hidden]> wrote in message
> On Sun, 25 Jan 2004 01:11:17 +0100, Andy Little wrote:
> >> > pqs is not like YANL !
> >>
> >> Of course. This is why I tried to keep the constant library independent
> >> of a concrete unit library and provide a basic mechanism to support
> >> certain type-mappings that are needed for all unit libraries.
> >
> > Yep. If it can be done it will be good... but there are many ways it can
> > stall.
> > That is the only concern I have. We shall see...
> I uploaded the example to the files section, please have a look. As you
> will see, I had to modify your operator* in mul_scalar.hpp, of course the
> other operators need to be aware of the constant library as well. I think
> this is no problem when we agree that the constant library is a
> prerequisit of your unit library ;) Honestly, I think we have to think
> about this, as I am not yet sure whether we can find some general rules
> that everyone can follow to make arbitrary libraries compatible and
> independent of each other. Thoughts?

Tried in VC7.1:


Andy Little

#include "../pqs.hpp"
using namespace physical_quantities;

#include "ideal_gas_law_constant.hpp"
#include "gas_constant.hpp"

template< typename Y >
typename pq_substance< Y >::mol
idealGasLaw( const typename pq_pressure< Y >::Pa& p,
             const typename pq_volume< Y >::m3& v,
             const typename pq_temperature< Y >::K& t )
    using physical_quantities::constants::chemistry::R;
    return p * v / ( R * t );

int main()
    typedef double X;

    pq_pressure< X >::Pa P(1.01325e5);
    pq_length< X >::m r(0.5e-6);
    pq_volume< X >::m3 V = 4./3. * 3.141592 * power<3>(r);
    pq_temperature< X >::K T(310);
    pq_substance<X>::mol subst1 = P * V /(physics::ideal_gas_constant<>::R
* T);
//fails (line 28)
    pq_substance< X >::mol subst = idealGasLaw< double >( P, V, T );

    std::cout << subst1 << std::endl;

VC7.1 out:
------ Build started: Project: physical_quantities, Configuration: Debug
Win32 ------

physical_quantities\examples\constant\operators.hpp(168) : error C2064: term
does not evaluate to a function taking 0 arguments
        physical_quantities\examples\ideal_gas_law_constant.cpp(14) : see
reference to function template instantiation 'boost::disable_if_c<B,T>::type
_temperature<Value_type>::K>(boost::constant<F>,const T &)' being compiled

     physical_quantities\examples\ideal_gas_law_constant.cpp(28) : see
reference to function template instantiation
idealGasLaw<double>(const physical_quantities::pq_pressure<Value_type>::Pa
&,const physical_quantities::pq_volume<Value_type>::m3 &,const
physical_quantities::pq_temperature<Value_type>::K &)' being compiled

Build log was saved at ""
physical_quantities - 1 error(s), 0 warning(s)

---------------------- Done ----------------------

    Build: 0 succeeded, 1 failed, 0 skipped

Boost list run by bdawes at, gregod at, cpdaniel at, john at