« Return to Thread: Does GCC assign any type to enums that can be specified in an assignment operator?

Re: Does GCC assign any type to enums that can be specified in an assignment operator?

by michael.a :: Rate this Message:

Reply to Author | View in Thread


> > Does GCC assign any type to enums that can be specified in an  assignment
> operator?
>
> I'm not sure I understand the question.  I assume a C++ context, and not a C
> context (which has different rules regarding enum types).
>
> What is the use case scenario?  Do you mean something like this...
>
> - - - - -
> enum Foo { Uno, Dos, Tres };
>
> class Bar
> {
>   int m;
> public:
>   Bar() : m(Uno) { }
>   Bar(Foo foo) : m(foo) { }
>   Bar(Bar const& bar) : m(bar.m) { }
>   Bar& operator = (Foo foo) { m = foo; return *this; }
>   operator Foo() const { return Foo(m); }
> };
> - - - - -
>
> --Eljay
>

I'm sorry, perhaps to be more specific, I was referring more so (if not entirely) to anonymous enums (never really ever use tagged enums)

Since asked, basicly imagine this:

 enum{ Uno, Dos, Tres }; //anonymous
 
 class Bar
 {
   int m;
 public:
   Bar& operator = (unsigned int foo) { m = foo; return *this; }
   Bar& operator = (signed int foo) { m = foo; return *this; }
 };

You could substitute pretty much any number of integral assignment operators.

Now say:

Bar bar; bar = Uno; //error: assignment operators are ambiguous

Whereas, with the Windows compiler (msvc for short) Uno will be treated as an int (signed -- perhaps more specifically a const long int if the option exists) ...basicly msvc resolves this ambiguity by choosing the closest match on a well defined top down prioritized basis, whereas GCC just gives up and declares ambiguity.

Its mostly just annoying... turns out though I already had an alternative assignment for all of the cases I've ran into so far during the porting process.

So I hope that clears everything up. Appreciate your curiosity.

sincerely,

michael

PS: I will go ahead and repost this in the Nabble forums if it doesn't pop up (my apologies if it is multiposted to the mailing lists etc)


 « Return to Thread: Does GCC assign any type to enums that can be specified in an assignment operator?