Operator overloading: a LEFT literal string + a RIGHT literal number fails with Error: Incompatible types. Which is not correct.
<h3><details><summary>Original Reporter info from Mantis: <small>Thaddy</small></summary><small> - **Reporter name:** Thaddy de Koning </small></details></h3> ## Description: construct.pas(26,23) Error: Incompatible types: got "LongInt" expected "ShortString" Note all other string types as well: both Ansi and Unicode.<br/> Strange thing is that all other combinations pass all tests.<br/> Below is a test program that I have tested with on WIN-x86_64 and Rasbian. I could reduce it to just the one case:Literal string left, variable integer right. ## Steps to reproduce: {$MODE OBJFPC}<br/> {$IFDEF MSWINDOWS}{$APPTYPE CONSOLE}{$ENDIF} ``` pascal operator + (Left: LongInt; const Right: string): string; begin writestr(Result,Left,Right); end; operator + (const Left: string; Right: LongInt): string; begin writestr(Result,Left,Right); end; // V = variable L is literal // S = string I is integer var Text: string = 'text'; Number: LongInt = 123456; begin Writeln(Text + Number); // PASS: VS+VI Writeln(Number + Text); // PASS: VI+VS Writeln(789012 + Text); // PASS: LI+VS Writeln(Text+789012); // PASS: VS+LI //---- problem here... Writeln('else text'+Number);// FAIL LS+VI : fails only on LEFT string literals + non-literal number with all string types //---- end of problem Writeln(Number + 'other text'); //PASS: VI+LS Writeln(string('else text')+Number); //PASS: CAST(LS)+VI writeln(789012 + 'other text'); // PASS: LI+LS writeln('other text',789012); // PASS: LS+LI Readln; end. ``` ## Additional information: Based on discussion here: http://forum.lazarus.freepascal.org/index.php/topic,44713.0.html ## Mantis conversion info: - **Mantis ID:** 35248 - **OS:** all - **OS Build:** all - **Build:** 41736 - **Platform:** all - **Version:** 3.3.1
issue