Bug in mixins?

Artur Skawina art.08.09 at gmail.com
Wed Mar 26 12:29:33 PDT 2014


On 03/07/14 20:22, Frustrated wrote:
> On Friday, 7 March 2014 at 09:10:45 UTC, John Colvin wrote:
>> functions introduced through mixin templates do not take part in overload resolution when an overload exists outside the mixin.
>> It's a common annoyance, I can't remember if there's a good reason for it.
> 
> 
> This seems to be the problem. The mixin thinks they are the same function so it doesn't insert it.  I guess it just looks at the name rather than the complete signature. Would be real nice if that wasn't the case or if one could chose the behavior. I can see in some cases it being nice to have the current behavior but not all(specifically talking about overloads).


You can explicitly add the function(s) to the overload set, ie
   
   mixin template some_mixin_templ() {
      void f() {}
   }

   struct S {
      mixin some_mixin_templ blah;

      void f(int) {}
      alias f =  blah.f; // add the one(s) from the mixin template
   }

or use a string mixin (which is less problematic inside a /mixin/ template):

   mixin template some_mixin_templ(string CODE="") {
      void f() {}
      mixin (CODE);
   }

   struct S {
      mixin some_mixin_templ!q{
         void f(int) {}
      };
   }

artur


More information about the Digitalmars-d mailing list