digitalmars.D.bugs - [Issue 4505] New: Type literal of pure function pointer inside function signature
- d-bugmail puremagic.com (52/52) Jul 25 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4505
- d-bugmail puremagic.com (15/15) Aug 29 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4505
http://d.puremagic.com/issues/show_bug.cgi?id=4505 Summary: Type literal of pure function pointer inside function signature Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: rejects-valid Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc D2 code, foo4() shows that you can't define a pure function pointer in a function signature: pure int sqr(int x) { return x * x; } pure int foo1(TF)(TF func, int x) { // OK return func(x); } pure int foo2(typeof(&sqr) func, int x) { // OK return func(x); } alias pure int function(int) FN; pure foo3(FN func, int x) { // OK, from Simen kjaeraas return func(x); } pure int foo4(pure int function(int) func, int x) { // line 14, ERR return func(x); } void main() { assert(foo1(&sqr, 5) == 25); assert(foo2(&sqr, 5) == 25); assert(foo3(&sqr, 5) == 25); assert(foo4(&sqr, 5) == 25); } DMD 2.047 prints: test.d(14): basic type expected, not pure test.d(14): found 'pure' when expecting ')' test.d(14): semicolon expected following function declaration test.d(14): no identifier for declarator int function(int) test.d(14): semicolon expected, not 'int' test.d(14): semicolon expected, not ')' test.d(14): Declaration expected, not ')' test.d(16): unrecognized declaration Also, it generates too many error messages. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jul 25 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4505 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |andrej.mitrovich gmail.com 19:11:49 PDT --- I think this is a problem of the keyword pure trying to act as a type specifier for the return type ( See also my bug 4734 for a similar issue). If you put pure after the function definition but before the identifier, like so: pure int foo4(int function(int) pure func, int x) { then your example compiles and all asserts pass. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 29 2010