This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] C++ math constants
> > 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