ふむふむ
alias void (*Hoge)(int*); void Foo(int *a) { a = cast(int *)1; } void Piyo(Hoge a, int *b) { a(b); printf("address: 0x%p\n", a); } void main() { int a; printf("before %d\n", a); Piyo(&Foo, &a); printf("after %d\n", a); }
aliasの部分をextern Cすると・・・
alias.d(21): function alias.Piyo (void(C *)(int*),int*) does not match parameter types (void(*)(int* a),int*) alias.d(21): Error: cannot implicitly convert expression (& Foo) of type void(*)(int* a) to void(C *)(int*)
どうやら、extern Cが悪さをしているらしいな・・・orz
しかもafterの値が変わってない・・・というか、foo(&bar(argument))ってなカンジで渡せるのかと思ってたけど、違うんだね・・・
追記:これが関連してるのかも・・・
extern宣言
http://www.kmonos.net/alang/d/declaration.html
記憶クラス extern のつきで宣言された変数の領域は、 モジュール内には確保されません。 同じ名前で変数を定義した別のオブジェクトファイルを リンクする必要があります。 この機能の使いどころは、 C言語のグローバル変数宣言の利用です。