New operators opStaticIndex and friends

Exil Exil at gmall.com
Thu May 16 22:26:34 UTC 2019


On Thursday, 16 May 2019 at 21:36:43 UTC, Simen Kjærås wrote:
> On Thursday, 16 May 2019 at 21:13:24 UTC, Exil wrote:
>> On Thursday, 16 May 2019 at 08:28:35 UTC, Simen Kjærås wrote:
>>> struct S {
>>>     template opIndex(size_t idx) {
>>>         static if (idx == 0) alias opIndex = fun1;
>>>         else alias opIndex = fun2;
>>>     }
>>>
>>>     void fun1(size_t i)(Foo!i value) {}
>>>     void fun2() {}
>>> }
>>
>> Well now your example doesn't have opIndex(T...)() that your 
>> original post did.
>
> Sure it does. There's essentially no difference between fun1 
> and fun2 here:
>
> template fun1(T...) {
>     alias fun1 = impl;
> }
>
> int impl() {
>     return 3;
> }
>
> int fun2(T...)() {
>     return 3;
> }
>
> unittest {
>     auto a = fun1!(1,2,3);
>     auto b = fun2!(1,2,3);
> }
>
> In the same way, whether I write auto opIndex()() {} or alias 
> opIndex = ... is irrelevant. The behavior should be exactly the 
> same.
>
>
>> I also don't see how this is a problem specifically if it was 
>> named opIndex. Seems more like a detail that would have to be 
>> ironed out either way to ensure templates can be used with 
>> opStaticIndex/opIndex.
>
> It's a problem because opIndex comes with special syntax that 
> other symbols don't have.
>
> --
>   Simen

This doesn't help with the explanation, what special syntax? 
Maybe an example that works with opStaticIndex and that wouldn't 
work with opIndex would help. Otherwise I still don't see a 
problem.


More information about the Digitalmars-d mailing list