Summary: Purity inference fails when template used before it's
           Product: D
           Version: unspecified
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Jonathan M Davis <> 2012-03-13 21:28:03 
PDT ---
2.059 HEAD

If you change std.utf.toUTFz to

const(wchar)* toUTF16z(C)(const(C)[] str) @system
    return toUTFz!(const(wchar)*)(str);

    toUTF16z("hello world");

then compilation fails with this error:

std/utf.d(1373): Error: pure function 'toUTF16z' cannot call impure function
std/utf.d(1378): Error: template instance std.utf.toUTF16z!(char) error
make[1]: *** [generated/linux/debug/64/unittest/std/utf] Error 1
make: *** [unittest] Error 2

toUTFz is _not_ marked as pure, and neither is toUTF16z. I don't believe that
toUTFz _can_ be pure (certainly, it _shouldn't_ be given what it does), so it
should always infer as impure, which would cause toUTF16z be inferred as impure
if it's changed to call toUTFz as is done above.

However, if you move toUTF16z to after the definition of toUTFz, then it
compiles. So, it appears to be a forward declaration issue.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to