[Issue 7815] New: Mixin template forward reference (?) regression

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Apr 3 10:07:53 PDT 2012


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

           Summary: Mixin template forward reference (?) regression
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: code at klickverbot.at


--- Comment #0 from klickverbot <code at klickverbot.at> 2012-04-03 10:08:27 PDT ---
DMD 2.058 accepted the following snippet, while DMD c2824d43 executes the else
branch of the static if. In there, though, instantiating the template will
(apparently) just work fine.

---
mixin template Helpers() {
  alias typeof(this) This;

  static if (is(Flags!This)) {
    Flags!This flags;
  } else {
    // DMD will happily instantiate the allegedly
    // non-existent Flags!This here. (!)
    pragma(msg, __traits(derivedMembers, Flags!This));
  }
}

template Flags(T) {
  mixin({
    string defs;
    foreach (name; __traits(derivedMembers, T)) {
        defs ~= "bool " ~ name ~ ";\n";
    }
    if (defs.length > 0) {
      return "struct Flags {" ~ defs ~ "}";
    } else {
      return "";
    }
  }());
}

struct Move {
  int a;
  mixin Helpers!();
}

enum a = Move.init.flags; // isSetFlags should exist.
---

(Note that while the above code is probably not the minimal possible example
needed to trigger the bug, it has been reduced beyond repair as far as its
original intent goes, so don't try to make sense of it in that regard.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list