Date: Mon, 15 Jun 1998 17:51:07 +0300 (IDT) From: Eli Zaretskii To: sl cc: DJGPP mailing list Subject: Re: enum problem In-Reply-To: <19980615072556700.AAA231@portC17.Generation.NET> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Precedence: bulk On Mon, 15 Jun 1998, sl wrote: > #include > > enum lineType > { > sLine=0x00, > dLine=0x01, > overwrite=0x02, > }; > > void saychoice(lineType choice) > { > if (choice|dLine==dLine) > printf("double line chosen"); > if (choice|overwrite==overwrite) > printf("overwrite mode chosen"); > } > > int main() > { > saychoice(sLine|overwrite); > } There are several problems here. First, compiling this as a C program didn't produce the warning you were complaining about. So I suspect you compiled this as a C++ program, which you should have mentioned. I'm quite sure that C++ produces an int from sLine|overwrite, and then objects to passing an int to a function which expects an enum. But I'm not knowledgeable about C++ enough to tell for sure. Anybody? Second, what exactly did you expect from an expression like this: if (choice|dLine==dLine) At least in C, the == operator has higher precedence than the | operator, so this is parsed as "if (choice | (dLine == dLine))", which is hardly what you wanted to say... Even if C++ changes that, I suggest to use explicit parentheses.