[Issue 21379] New: UDA's implemented with functions and taking alias params don't compile
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Thu Nov 12 09:11:18 UTC 2020
    
    
  
https://issues.dlang.org/show_bug.cgi?id=21379
          Issue ID: 21379
           Summary: UDA's implemented with functions and taking alias
                    params don't compile
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: feco.graczer at gmail.com
public struct TestX(alias ST)
{
    alias serializer = ST;
}
TestX!ST resultSerializer (alias ST) ()
{
        return TestX!ST();
}
// this compiles, no problem
@resultSerializer!(function (string){return "hello";})() 
void f () {}
class X
{
        // this one doesn't compile
        @resultSerializer!(function (string){return "hello";})()
        void f () {}
}
compiler error message for the UDA of X.f:
function tests.X.resultSerializer!(function (string)
{
return "hello";
}
).resultSerializer need this to access member resultSerializer
The workaround was to not use functions to implement UDA, but to create a class
to implement it:
public struct ResultSerializer(alias ST)
{
    alias serializer = ST;
}
@ResultSerializer!(function (string){return "hello";})()
void f () {}
class X
{
        @ResultSerializer!(function (string){return "hello";})()
        void f () {}
}
--
    
    
More information about the Digitalmars-d-bugs
mailing list