$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Andy Little (andy_at_[hidden])
Date: 2005-05-08 08:19:59
"Tobias Schwinger" <tschwinger_at_[hidden]> wrote
> Andy Little wrote:
>> FWIW thi would work fine for me:
>>
>>    typedef  std::math::constants<T> math;
>>     2 * math::pi * r ;
>
> This looks nice at first glance.
Thanks ......................................... :-)
> Besides getting rid of the empty parentheses, there are the following 
> disadvantages:
   ^^^
I Assume you mean In spite of ?
> - modularity/extensibility (once constants<T> is defined you can't add 
> constants to it)
In practise you can.  constants struct 's members are really just global 
constants. Your compiler wont know the difference, because it only instantiates 
what you ask for, add a new type and it wont know its there till you use it, and 
will then assume its always been there.  However not conforming I guess. A 
derivation  for the newer constants would be conforming.
template <typename T>
struct constants2 : constants<T>{
    static T const & andys_constant;
}
template <typename T>
 T const & constants2<T>::andys_constant = T(2005);
typedef  std::math::constants2<double> math;
 2 * math::pi * r ;
> - portability (the code above won't compile with BCC)
Whats the error. AFAIK its correct C++  is it not ?  If its correct C++ then I 
think this is not a strong argument.
> - there is no way to pass constants as a type template argument.
( IOW  use a function ..? )
Well .. is that an essential ?..Do you have a use case demonstrating this need? 
AFAIK constants are always pretty specific to their own particularly algorithms.
Whatever ... I still like  std::math::constants<T>::pi   much better than 
std::pi<T>()     :-)
regards
Andy Little