I'm working in C++11 and including an h file implemented in C++03. In the h file I'm including there's an enum Foo
defined. I want to declare a forward to it in code.h
and use it in code.cpp
:
header.h:
enum Foo {A=1};
code.h:
enum Foo : int; // also tried : unsigned int, long, short, unsigned short, char, unsigned char
void bar(Foo foo);
code.cpp:
#include header.h
void bar(Foo foo) { }
This is the error I get when I compile (tested g++ 4.8.5 and g++ 5.3.1):
In file included from code.cpp:2:0:
header.h:1:6: error: underlying type mismatch in enum ‘enum Foo’
enum Foo {A=1};
^
In file included from code.cpp:1:0:
code.h:3:12: error: previous definition here
enum Foo : int;
I can fix this error if I change header.h to:
enum Foo : int {A=1};
But I don't own that header and can't change it. Taking the error at face value, it sounds like all I need to know is what type g++ uses for enums which don't specify underlying type, then use that type in my forward.
Even this simple example doesn't work :
#include <iostream>
#include <string>
#include <type_traits>
enum Foo {A=1};
enum Foo : unsigned; // : std::underlying_type<Foo>::type also doesn't work
int main()
{
std::cout << "Hello, world\n";
}