[Issue 21137] New: Can't get the UDA given to the lambda expression parameters

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Aug 8 19:26:58 UTC 2020


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

          Issue ID: 21137
           Summary: Can't get the UDA given to the lambda expression
                    parameters
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: zan77137 at nifty.com

A UDA given to non-typed parameters in lambda expression/function literal
cannot be detected:

------------------------
import std;

template detectUDA(alias f)
{
    // Can't give the lambda to the Parameters.
    // It does not satisfy isCallable
    pragma(msg, __traits(getAttributes, Parameters!f[0..1])[0]);
    void detectUDA() {}
}

void main()
{
    detectUDA!((@(1) int a) => a);       // OK
    detectUDA!((@(1) a) => a);           // Error
    detectUDA!(delegate(@(2) int a) {}); // OK
    detectUDA!(delegate(@(2) a) {});     // Error
    detectUDA!((@(3) int a) {});         // OK
    detectUDA!((@(3) a) {});             // Error
}
------------------------

This example deals with Parameters, which, as far as I know, will not be taken
out in any way.
In addition, there are few ways to get traits of a non-typed lambda expression
other than whether it can be called using arguments of certain types.
New __traits may be needed to solve the problem.

--


More information about the Digitalmars-d-bugs mailing list