Best answer:
const
n: WideString = ''; //n=Nothing
s := n+#$0061+#$0301;
This fixes all cases i have below that otherwise fail.
The only variant that works is to declare it as a constant:
AccentAcute: WideString = #$0301;
AccentAcute: WideString = WideChar($0301);
AccentAcute: WideString = WideChar(#$0301);
AccentAcute: WideString = WideString(#$0301);
Sample Usage:
s := 'Pasta'+AccentAcute;
Constant based syntaxes that do not work
AccentAcute: WideString = $0301;
incompatible types
AccentAcute: WideString = #0301;
gives
AccentAcute: WideString = WideString($0301);
invalid typecast
AccentAcute: WideString = WideString(#$0301);
invalid typecast
AccentAcute: WideChar = WideChar(#0301);
gives Pastai
AccentAcute: WideChar = WideChar($0301);
gives Pasta´
Other syntaxes that fail
'Pasta'+WideChar($0301)
gives Pasta´
'Pasta'+#$0301
gives Pasta´
WideString('Pasta')+#$0301
gives
Summary of all constant based syntaxes i found think up:
AccentAcute: WideString = #$0301; //works
AccentAcute: WideString = WideChar(#$0301); //works
AccentAcute: WideString = WideString(#$0301); //works
AccentAcute: WideString = $0301; //incompatble types
AccentAcute: WideString = WideChar($0301); //works
AccentAcute: WideString = WideString($0301); //invalid typecast
AccentAcute: WideChar = #$0301; //fails, gives Pasta´
AccentAcute: WideChar = WideChar(#$0301); //fails, gives Pasta´
AccentAcute: WideChar = WideString(#$0301); //incompatible types
AccentAcute: WideChar = $0301; //incompatible types
AccentAcute: WideChar = WideChar($0301); //fails, gives Pasta´
AccentAcute: WideChar = WideString($0301); //invalid typecast
Rearranging WideChar
can work, as long as you only append to a variable
//Works
t := '0123401234012340123';
t := t+WideChar(#$D840);
t := t+WideChar(#$DC00);
//fails
t := '0123401234012340123'+WideChar(#$D840);
t := t+WideChar(#$DC00);
//fails
t := '0123401234012340123'+WideChar(#$D840)+WideChar(#$DC00);
//works
t := '0123401234012340123';
t := t+WideChar(#$D840)+WideChar(#$DC00);
//works
t := '';
t := t+WideChar(#$D840)+WideChar(#$DC00);
//fails; gives junk
t := ''+WideChar(#$D840)+WideChar(#$DC00);
//crashes compiler
t := WideString('')+WideChar(#$D840)+WideChar(#$DC00);
//doesn't compile
t := WideChar(#$D840)+WideChar(#$DC00);
Definitely hitting against compiler nonsense; cases that weren't tested tested fully. Yes, i know David, we should upgrade.