muparser icon indicating copy to clipboard operation
muparser copied to clipboard

Strange behavior of the postfix operator on macOS

Open manu-aesim opened this issue 11 months ago • 13 comments

Hello,

I am defining postfix operators with metrics coefficients:

expression_parser.DefinePostfixOprt(_T("p"), [](double value){return value * 1E-12;});
expression_parser.DefinePostfixOprt(_T("n"), [](double value){return value * 1E-9;});
expression_parser.DefinePostfixOprt(_T("u"), [](double value){return value * 1E-6;});
expression_parser.DefinePostfixOprt(_T("m"), [](double value){return value * 1E-3;});
expression_parser.DefinePostfixOprt(_T("k"), [](double value){return value * 1E3;});
expression_parser.DefinePostfixOprt(_T("M"), [](double value){return value * 1E6;});
expression_parser.DefinePostfixOprt(_T("G"), [](double value){return value * 1E9;});

And I am using those to evaluate expressions. For some reasons that I don't understand the operators "p" and "n" are not working on macOS (Clang) but work fine on Linux (GCC) and Windows (MSVC). The other operators ("m", "u", "k"...) work on all platforms.

On macOS, the following call throw the following error message:

std::string parameter_expression = "27n";
expression_parser.SetExpr(parameter_expression);
double value = expression_parser.Eval();

error: Unexpected token "27n" found at position 0.

I don't have defined any other constant or variables and I don't have weird compiler flags. Any ideas ?

Thanks!

manu-aesim avatar Jul 06 '23 19:07 manu-aesim