[Issue 2368] New: Calling a function with an address of another function, then calling a returned object is rejected

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Sep 21 17:07:46 PDT 2008


http://d.puremagic.com/issues/show_bug.cgi?id=2368

           Summary: Calling a function with an address of another function,
                    then calling a returned object is rejected
           Product: D
           Version: 2.019
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: snake.scaly at gmail.com


Sorry for the long summary.  In the following code,
the last line of main() is rejected by the compiler:

int function() wrap(void function()) {
  static int worker() {
    return 0;
  }
  return &worker;
}
void main() {
  auto x = wrap(&main)();       // OK
  wrap(&main)();        // found '&' when expecting ')'; no identifier for
declarator wrap; etc.
}

This seems to have to do something with an ampersand
('&') because similar code with passing other objects works:

  auto m = &main;
  wrap(m)();

compiles correctly.


-- 



More information about the Digitalmars-d-bugs mailing list