template mixin function name mangling

John Colvin john.loughran.colvin at gmail.com
Mon Apr 22 02:36:30 PDT 2013


On Monday, 22 April 2013 at 09:03:24 UTC, Peter Alexander wrote:
> mixin template A() {
>     extern(C) int foo() { return 1; }
> }
>
> mixin template B() {
>     extern(C) int foo() { return 2; }
> }
>
> mixin A a;
> mixin B b;
>
> void main() {
>     int x = a.foo() + b.foo();
> }
>
> If both foo's have the same symbol, then how am I able to 
> disambiguate them in code?
>
> Maybe duplicate extern(C) template mixin symbols need to be an 
> error?

If there are true duplicates then it would need to be an error. 
However, if a mixin uses a mixin identifier then it's going to 
need to be mangled anyway, so only

mixin A;
mixin B;

would have to be an error. It already is an error, but 
unfortunately only when you reference the content of the mixin, 
not at the mixin statement.


More information about the Digitalmars-d mailing list