じゃあミックスイン

Fooをクラスじゃなくてテンプレートにしてmixinするという本質から外れた解法を思いつきました。

public import std.c.stdarg;

public template Foo(T) {
...(snip)...
private import foo;

void main() {
  mixin Foo!(int);
  int j;
  j = foo("hello", 3, 23L, 4);
  printf("j = %d\n", j);
  assert(j == 30);
}

ぜんぜん解決している気分になりません。動くことは動くけどね...

と思ったけどこれもだめだ。baz.dとか作って

private import foo;

void baz() {
  mixin Foo!(int);
}

とかをリンクすると'Previous Definition Different'とか言うんですけど。どうすれバインダー!