Worst ideas/features in programming languages?

Tejas notrealemail at gmail.com
Thu Jan 6 02:56:52 UTC 2022


On Wednesday, 5 January 2022 at 22:42:14 UTC, Paul Backus wrote:
> On Wednesday, 5 January 2022 at 07:28:41 UTC, Timon Gehr wrote:
>>
>> How about something like opArgs, dealing specifically with 
>> this case? (i.e., a function call `foo(x)` with a single 
>> argument is immediately rewritten to `foo(x.opArgs)` if `x` 
>> has a member `opArgs`, and this rewrite is applied exactly 
>> once.)
>
> This mechanism seems too powerful to me; for example, one could 
> write code like the following:
>
>     struct S {
>         string opArgs;
>     }
>
>     string fun(S s) { return "S overload"; }
>     string fun(string s) { return "string overload"; }
>
>     void main() {
>         assert(fun(S()) == "S overload"); // fails
>     }
>
> If there is to be any mechanism for automatic expansion of 
> tuples, it should probably be narrow enough to avoid enabling 
> surprises like this one.

Yeah, and what does "exactly once" mean here?
```d

struct S {
          string opArgs;
      }

      string fun(S s) { return "S overload"; }
      string fun(string s) { return "string overload"; }

      void main() {
          S s = S();
          assert(fun(s) == "string overload"); // succeeds
          assert(fun(s) == "S overload"); // this also succeeds??

      }
```


More information about the Digitalmars-d mailing list