This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] C++ math constants
On Thu, Feb 21, 2013 at 4:18 PM, Daniel Krügler
<daniel.kruegler@gmail.com> wrote:
> 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
There will be a proposal for 'constexpr variable template' in the Bristol
mailing. It should take care of these issues.
-- Gaby