www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3530] New: A case where IFTI works with int but not enum

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

           Summary: A case where IFTI works with int but not enum
           Product: D
           Version: 2.036
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bugzilla kyllingen.net


--- Comment #0 from Lars T. Kyllingstad <bugzilla kyllingen.net> 2009-11-20
03:09:45 PST ---
This is probably a corner case, but it's one where IFTI works perfectly for
ordinary int template parameters, but not for named int enums (which should
more or less be the same thing):

  // This compiles:
  struct Foo(T, int I) { }
  void useFoo(T, int I)(Foo!(T, I) a, Foo!(T, 2) b) { }

  void main()
  {
      Foo!(double, 0) foo0;
      Foo!(double, 2) foo2;
      useFoo(foo0, foo2);    // This calls useFoo!(double, 0). Yay!
  }


  // Replace int with an enum and it no longer compiles:
  enum MyEnum { X, Y }
  struct Bar(T, MyEnum E) { }
  void useBar(T, MyEnum E)(Bar!(T, E) a, Bar!(T, MyEnum.Y) b) { }

  void main()
  {
      Bar!(double, MyEnum.X) barX;
      Bar!(double, MyEnum.Y) barY;
      useBar(barX, barY);   // Should call useBar!(double, MyEnum.X),
                            // instead it gives the errors below.
  }

Error: template c.useBar(T,MyEnum E) does not match any function template
declaration
Error: template c.useBar(T,MyEnum E) cannot deduce template function from
argument types !()(Bar!(double,cast(MyEnum)0),Bar!(double,cast(MyEnum)1))

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