This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] C++ math constants


2013/2/21 Benjamin De Kosnik <bkoz@redhat.com>:
>
>> > 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.

An implementation is not required to diagnose it. You will notice a
linker error with Clang for example and this is conforming, because
__math_constants<double>::__pi is ODR-used.

> 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?

No ;-)

- Daniel


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]