From: Jens Maurer (Jens.Maurer_at_[hidden])
Date: 2001-04-24 12:08:12


Ed Brey wrote:
>
> From: "Paul A. Bristow" <pbristow_at_[hidden]>
>
> > // math_constants.hpp <<< math constants header file - the interface.
> > namespace boost
> > {
> > namespace math_constants
> > {
> > extern const long double pi;
> > } // namespace math_constants
> > } // namespace boost

I like the template-based interface proposed earlier better,
because it allows e.g. interval or boost::rational<int> constants.

> How is constant folding accomplished, given that the definition appears
> to be out-of-line?

Allowing constant folding (or not) is a quality-of-implementation issue
and should not affect the interface. (In particular, implementors
may choose to define the constants inline, but that's not what I'd
do for the generic boost implementation.)

> > cout << "pi is " << boost::math_constants::pi << endl;
> > using boost::math_constants::pi; // Needed for all constants used.
> > // recommended as useful documentation! whereas:
> > // using namespace boost::math_constants; // exposes ALL names in
> > math_constants.
> > // that could cause some name collisions!
>
> Pulling all math constants into the global namespace is indeed asking
> for trouble in general, although it would be nice to allow it as it can
> be practical within a function.

"using namespace" directives within a function scope are ok, and may
save some typing within the function. Name collisions are entirely
the responsibility of the function's author.

Jens Maurer