> > How about the attached file as a start for <ext/math>. I used the > > constexpr approach (instead of function calls) and replicated the > > constants that are available in <math.h> in Unix.
then this should really be ext/cmath > > 1) In this case I miss the corresponding variable definitions, because > you violate the ODR, when you have something like the following: > > #include <iostream> > > template<class T> > void print(const T& t) { std::cout << t; } > > int main() { > print(__math_constants<double>::__pi); > } Not seeing it. Say for: #include <iostream> // A class for math constants. template<typename _RealType> struct __math_constants { // Constant @f$ \pi @f$. static constexpr _RealType __pie = 3.1415926535897932384626433832795029L; }; template<class T> void print(const T& t) { std::cout << t; } int main() { print(__math_constants<double>::__pie); return 0; } I'm not getting any definition, even at -O0. Any chance you could expand on your thinking here Daniel? > 2) You need to use either braced initializers *or* using initializers > with equal, a parenthesized initializer isn't supported > (/brace-or-equal-initializer/). Yeah. This works: // Constant @f$ \pi @f$. static constexpr _RealType __pie = 3.1415926535897932384626433832795029L; -benjamin