www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 24480] New: getSymbolsByUDA ignores template functions

https://issues.dlang.org/show_bug.cgi?id=24480

          Issue ID: 24480
           Summary: getSymbolsByUDA ignores template functions
           Product: D
           Version: D2
          Hardware: All
                OS: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody puremagic.com
          Reporter: johanengelen weka.io

Testcase:
```
struct SomeUDA {}

struct S {
     SomeUDA S opBinary(string op: "-")(S rhs) const pure nothrow  nogc {
        return rhs;
    }
    S opBinary(string op: "*")(S dur) const pure nothrow  nogc {
        return dur;
    }
}

import std.traits;
pragma(msg, getSymbolsByUDA!(S, SomeUDA));
```

This prints "()", i.e. does not return the template function
(https://d.godbolt.org/z/Th86qvMGM).

Seems to be fixed by adding `true` on this line
https://github.com/dlang/phobos/blob/77adcadf7961dbe1177aa79be381311404a81d46/std/traits.d#L9009
(similar to the `if` condition three lines above it). However, then this
slightly modified testcase still fails:

```
struct S {
    S opBinary(string op: "-")(S rhs) const pure nothrow  nogc {
        return rhs;
    }
     SomeUDA S opBinary(string op: "*")(S dur) const pure nothrow  nogc {
        return dur;
    }
}
```

--
Apr 03