Re: Error when forward referencing an enum in a typedef

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13 February 2011 17:04, Jonathan Wakely <jwakely.gcc@xxxxxxxxx> wrote:
> On 13 February 2011 10:41, Graham Bloice wrote:
>> The following code fails to compile on GCC 4.5.1 (CodeSourcery G++
>> Lite for ARM), whereas it compiles happily under the ARM compiler and
>> Visual Studio 2010.
>>
>> #ifdef __cplusplus
>> extern "C" {
>> #endif
>>
>> typedef enum abc xyz;
>> enum abc {
>>    p1 = 0,
>>    p2,
>>    p3
>> };
>>
>> #ifdef __cplusplus
>> }
>> #endif
>>
>> The errors produced are:
>>
>> test.cpp:5:14: error: use of enum 'abc' without previous declaration
>> test.cpp:5:21: error: invalid type in declaration before ';' token
>>
>> Is this a bug, or stricter compliance?
>
> Stricter compliance, the code is not valid in C++98
>
>> Is there an option to permit
>> this sort of construct to compile?
>
> I don't believe so, no.
>
>> I'm aware that putting the typedef
>> after the enum definition allows it to compile, but this would then
>> mean modifying the vendor supplied headers and keeping track of
>> changes would be much more difficult.
>
> C++0x allows an enumeration type to be declared by an
> opaque-enum-declaration, which I think would allow you to put a
> declaration of the type before the vendor header:
>
> enum abc;
> #include "abc.h"
>
> G++ doesn't support this though.
>

Some more more investigation leads me to believe that the original
source for this problem, the 'cloud' ARM compiler for mbed
(http://mbed.org) compiles all the code in 'C' mode.  Passing '-x C'
as a flag to g++ allows this to compile.  That then reveals that I
don't have the include for the cstdlib on the path, but that's another
issue.



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux