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;
}
}
```
Comment #1 by issues.dlang — 2024-04-05T22:27:01Z
Yeah, __traits(getOverloads, ...) won't give you templated overloads unless you tell it to - and in the general case, it really isn't going to work well to get attributes from a templated function because of attribute inference. However, for UDAs, they should be there regardless.
Comment #2 by robert.schadek — 2024-12-01T16:42:23Z