Deprecation of implicit string concatenation

Johan Engelen via Digitalmars-d digitalmars-d at puremagic.com
Sun Apr 2 03:55:22 PDT 2017


On Sunday, 2 April 2017 at 10:05:57 UTC, Jonathan M Davis wrote:
> On Sunday, April 02, 2017 11:47:52 Jacob Carlborg via 
> Digitalmars-d wrote:
>> On 2017-04-02 11:22, Johan Engelen wrote:
>> > Since 2.072, implicit string concatenation is deprecated 
>> > [1]. Can someone give me a link to the discussion about this?
>> >
>> > I am wondering about the language spec changes involved.
>> >
>> > ```
>> >
>> >   "abc"
>> >   "def"
>> >
>> > ```
>> > means something different than
>> > ```
>> >
>> >   "abc"
>> >   ~ "def"
>> >
>> > ```
>> > right? (for example because opBinary!(“~”) can be overloaded)
>>
>> It's not possible to overload operators for the built in 
>> types, or am I missing something?
>
> No, it's definitely not possible to overload operators on 
> built-in types.

This is not about overloading of built-in types. It is about the 
code text `"abc" ~ "def"` and `"abc" "def"` not being equivalent.

I am afraid the deprecation happened without careful thought 
behind it, because the deprecation text shows only the simplest 
of cases. It does not show a case where the ~ operator is used as 
part of a larger expression and together with operator 
overloading.

```
import std.stdio;

class A {
   A opBinary(string op)(string rhs) {
     writeln(rhs);
     return this;
   }
}

void main() {
   A a = new A();

   a ~ "abc" ~ "def";
	
   a ~ "abc"  "def";
}
```

- Johan


More information about the Digitalmars-d mailing list