I came across the following construct in a C project that I port to C++;
enum TestEnum 
{
    A=303,
    B=808
} _TestEnum;
int foo()
{
  _TestEnum = B;
}
When compiling with GCC and taking a look at the generated code I get:
nils@doofnase ~ $ gcc -std=c90 -O2 -c ./test.c -o test.o
nils@doofnase ~ $ size test.o
   text    data     bss     dec     hex filename
     59       0       0      59      3b test.o
So zero bytes of data or BSS segments used.
On the other hand if I compile in C++ I get:
nils@doofnase ~ $ g++ -std=c++11 -O2 -c ./test.c -o test.o
nils@doofnase ~ $ size test.o
   text    data     bss     dec     hex filename
     59       0       4      63      3f test.o
I see four byte storage allocated in BSS as I would expect.
Also, in the C project the enum definition is actually located in a header-file which gets included in multiple c files. The project compiles and links just fine. When compiled and linked as C++ the compiler complains that _TestEnum is defined in multiple objects (right so!).
What is going on here? Am I looking at some archaic C language special case?
Edit: For completes sake, this is the gcc version:
nils@doofnase ~ $ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609
 
    