\int_eval:n { - (1+2) }

gives a "Missing number, treated as zero" message. So does \int_eval:n { 
+ (1+2) }. But

\int_eval:n { 0 - (1+2) }

evaluates correctly. If + ( or - ( are the first members of an integer 
argument, an error results; if they are not the first members, they are 
accepted by \int_eval:n etc. I don't know that this is a bug as such but 
it certainly feels to me like an untidiness in the l3int interface. It 
means that the order in which component parts of an expression are 
presented to \int_eval:n matters, even though in an arithmetical sense, 
they evaluate to the same number.

I query too whether an expression like

\int_eval:n { 3(1+2) }

should "evaluate" to 3(1+2), rather than 9, without showing an error.

(Alternatively, I find myself wondering what would be entailed to 
harmonize the integer interface with the fp one (which has no problem 
with these expressions)? Then one could choose whether to evaluate an 
expression involving integral numerals  in l3fp or l3int without having 
to change the expression, as one does at present. For instance, if the 
expression involves an exponent, use l3fp; if not use l3int. This choice 
becomes more complicated when the expression itself needs to be changed.)


This email has been checked for viruses by Avast antivirus software.