[Mesa-dev] [PATCH] nv50/ra: `isinf()` is in namespace `std` since C++11

Jose Fonseca jfonseca at vmware.com
Sat Mar 19 22:30:27 UTC 2016


On 19/03/16 22:25, Ilia Mirkin wrote:
> On Sat, Mar 19, 2016 at 6:23 PM, Jose Fonseca <jfonseca at vmware.com> wrote:
>> On 18/03/16 04:00, Ilia Mirkin wrote:
>>>
>>>
>>> On Mar 17, 2016 8:27 PM, "Matt Turner" <mattst88 at gmail.com
>>> <mailto:mattst88 at gmail.com>> wrote:
>>>   >
>>>   > On Thu, Mar 17, 2016 at 5:17 PM, Pierre Moreau <pierre.morrow at free.fr
>>> <mailto:pierre.morrow at free.fr>> wrote:
>>>   > > This fixes a compile error while building Nouveau with C++11
>>> enabled (and
>>>   > > glibc >= 2.23). This happens if SWR is enabled, as it forces C++11.
>>>   >
>>>   > That seems bad, right?
>>>   >
>>>   > Enabling OpenSWR should affect how any other drivers are built. Why
>>>   > does this happen?
>>>
>>> Yeah, the fix here is to fix the build not to add random unrelated
>>> options from one driver when building another.
>>
>>
>> Although I agree in principle, that drivers should not interfere with others
>> build,  C++14 will soon be the default [1].
>>
>> So, in this particular case, it seems a missed opportunity not to try to fix
>> this generically.
>>
>>
>> What about adding to include/c99_math.h something like
>>
>> #if __cplusplus >= 201103L
>>     using std::isinf;
>> #endif
>
> Why is isinf() becoming unavailable by the way? I don't think anyone's
> given a clear answer on that. At least I haven't heard one.

It's unavoidable.

On C99 isinf is a macro.

On C++11 isinf is an function inside std namespace.

You can't have a macro inside a C++ namespace -- macros have no namespaces.

So, even if you `#include <math.h>` instead of `#include <cmath>`, the 
math.h must not `#define isinf` so that C-prepposeccor doesn't expan 
`std::isinf` to invalid code.


Jose







More information about the mesa-dev mailing list