[cfe-dev] _Generic compiles fine in c++ source

Aaron Ballman aaron at aaronballman.com
Sat Jan 18 10:04:34 PST 2014


On Sat, Jan 18, 2014 at 12:54 PM, Prathamesh Kulkarni
<bilbotheelffriend at gmail.com> wrote:
> On Sat, Jan 18, 2014 at 11:17 PM, Prathamesh Kulkarni
> <bilbotheelffriend at gmail.com> wrote:
>> On Sat, Jan 18, 2014 at 9:53 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
>>> Actually, I take that back, we treat it as a language extension (not
>>> certain how I missed that). You should be seeing an extension warning:
>>> "generic selections are a C11-specific feature" depending on your
>>> compiler flags.
>>>
>>> So I wouldn't file a bug just yet. What flags are you passing in to
>>> the compiler?
>>
>> I hadn't passed any flags initially. However when i passsed -Wc11-extensions,
>> i got the warning:
>> x.cpp:3:11: warning: generic selections are a C11-specific feature
>> [-Wc11-extensions]
>>   int a = _Generic (1, int: 2);
>> But when I pass no options, it compiles silently.
>>
>>>
>>> ~Aaron
>>>
>>> On Sat, Jan 18, 2014 at 11:21 AM, Aaron Ballman <aaron at aaronballman.com> wrote:
>>>> That appears to be a bug; if you'd like, you could file a bug report
>>>> at http://llvm.org/bugs on it.
>>>>
>>>> Good catch!
>>>>
>>>> ~Aaron
>>>>
>>>> On Sat, Jan 18, 2014 at 2:48 AM, Prathamesh Kulkarni
>>>> <bilbotheelffriend at gmail.com> wrote:
>>>>> Hi, sorry to ask a daft question but why does the following code
>>>>> compile fine with clang/clang++ ?
>>>>>
>>>>> int main()
>>>>> {
>>>>>   int a = _Generic(1, int: 2);
>>>>>   int &x = a;
>>>>> }
>>>>>
>>>>> As far as I know, it does not conform to either C or C++ ( I believe
>>>>> _Generic is not supported by C++ ? ).
>>>>> It fails to compile with g++.
>>>>>
> The same thing is true for _Static_assert.
> This compiled without any error/warning too (without passing any option):
>
> int main()
> {
>     int a;
>     int &x = a;
>     _Static_assert(1, "hello world");
> }
>
> Are (most of) c11 features treated as language extensions ?

Yes, they appear to be. It seems that language extension diagnostics
are ignored by default, which is why you need to enable them
explicitly. For instance, with -pedantic, et al.

~Aaron



More information about the cfe-dev mailing list