templated lambda with {} cause GC

learnfirst1 learnfirst1 at gmail.com
Fri Aug 10 09:57:53 UTC 2018


import core.stdc.stdio;

struct Test {
	string name ;
}

void T(alias pred, A...)(){
	__gshared t = Test(A) ;
	 pred(t);
}

extern(C) void main(){
	T!(t => printf("test 1 name = %s\n".ptr, t.name.ptr), "test") ;  
// build OK
	T!(t => {
		printf("test 2 name = %s\n".ptr, t.name.ptr);
	}, "test") ; // build error
}

--------------

build this with betterC

Undefined symbols for architecture x86_64:
   "__d_allocmemory", referenced from:
       __D4test4mainUZ__T9__lambda2TSQBb4TestZQvFNaNbNfQtZDFNbNiZv 
in test.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to 
see invocation)
Error: linker exited with status 1


to use without {}, it work as expect.

Is there a way to avoid this GC with {}, because we need multi 
line here.


More information about the Digitalmars-d-learn mailing list