Hi Peter,
I have changed it in SVN 215.
I still disagree with the warning because in a comparison of an
enumeration member
with an integer should perform integer promotion of the enum member to
int and then do
integer comparison and NOT convert the int to an enum member (which it
can't) and then
do the comparison (or issue the warning).
In other words, I read "l < 10" as "(int)l < 10" (which can be true or
false) and not as "l < (Function_line)10"
which can also be true or false because if I allow implicit
(Function_line)10 then I cannot rule out (Function_line)42
either.
The really interesting question is if the compiler would optimize "if (i
< 10)" away which I would consider a fault
in the compiler. As a warning it is just a bit annoying because it
forces "default: ;" all over the place.
/// Jürgen
On 04/19/2014 02:36 AM, Peter Teeson wrote:
Hi Jürgen:
I've been thinking again about this warning and I'm inclined to agree
with it.
..MyProjects/GNUAPL/apl-svn/src/UserFunction.cc:1191:10: Comparison of
constant 10 with expression of type 'Function_Line' is always true
if (l < 10) ucs.append(UNI_ASCII_SPACE);
These suggestions eliminate the Warning.
In File APL_Types.hh
enum Function_Line
{
Function_Retry = -2, // →'' in immediate execution
Function_Line_0 = 0,
Function_Line_1 = 1,
Function_Line_MAX = 10 // << === My suggestion
};
In UserFunction.cc:1191:10:
if (l < Function_Line_MAX) ucs.append(UNI_ASCII_SPACE); // << === My
suggestion