digitalmars.D.learn - why mixin template can not inclulde statement;
- learnfirst1 (14/14) Aug 10 2018 mixin template test(A...){
- learnfirst1 (16/17) Aug 10 2018 mixin template test(A...){
- Kagamin (2/10) Aug 10 2018 Looks like some problem with tuple, try __gshared a = A[0];
- learnfirst1 (3/5) Aug 10 2018 this work, it report no error but give a link problem. (this
- learnfirst1 (23/25) Aug 10 2018 mixin template test(A...){
- Kagamin (14/14) Aug 10 2018 try this:
- Kagamin (9/9) Aug 10 2018 Mixim template can only introduce declarations, not statements, a
- Radu (11/20) Aug 10 2018 Except that you can't use tuples for that, a working sample:
- learnfirst1 (3/12) Aug 10 2018 Thanks, this work for me. my second example should be a dmd bug
mixin template test(A...){
__gshared a = A;
a++;
}
extern(C) void main(){
mixin test!123;
}
-------------
I dont want to use string mixin to intro a lot un want symbol,
try with mixin template find this not work.
I know if mixin test on global it should not working, but why not
make the limit for function scope ?
I try use D for a WASM project then find so much limitation with
no good reason. or I missing some thing here ?
Aug 10 2018
On Friday, 10 August 2018 at 12:38:55 UTC, learnfirst1 wrote:
mixin template test(A...){
mixin template test(A...){
__gshared a = A;
}
extern(C) void main(){
mixin test!123;
}
---------------
duplicate symbol __D4test4mainUZ8__mixin111__a_field_0i in:
test.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to
see invocation)
Error: linker exited with status 1
this really make no sense, what is wrong with it? (same code
build with ldc2)
Aug 10 2018
On Friday, 10 August 2018 at 13:01:21 UTC, learnfirst1 wrote:
duplicate symbol __D4test4mainUZ8__mixin111__a_field_0i in:
test.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to
see invocation)
Error: linker exited with status 1
this really make no sense, what is wrong with it? (same
code build with ldc2)
Looks like some problem with tuple, try __gshared a = A[0];
Aug 10 2018
On Friday, 10 August 2018 at 13:10:57 UTC, Kagamin wrote:On Friday, 10 August 2018 at 13:01:21 UTC, learnfirst1 wrote: Looks like some problem with tuple, try __gshared a = A[0];this work, it report no error but give a link problem. (this could be a bug ?)
Aug 10 2018
On Friday, 10 August 2018 at 13:17:13 UTC, learnfirst1 wrote:this work, it report no error but give a link problem. (this could be a bug ?)mixin template test(A...){ __gshared int a = A[0]; pragma(inline, true) // remove this will work static extern(C) int test(){ a++; return 0; } int dummy = test(); } import core.stdc.stdio; extern(C) void main(){ mixin test!1; printf("a=%d\n", a); } ----------------------- Undefined symbols for architecture x86_64: "__D4test4mainUZ8__mixin1QvUNbNiZi", referenced from: _main 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
Aug 10 2018
try this:
mixin template test(A...){
__gshared int a = A[0];
int dummy = (){
a++;
return 0;
}();
}
import core.stdc.stdio;
int main(){
mixin test!1;
printf("a=%d\n", a);
return 0;
}
Aug 10 2018
Mixim template can only introduce declarations, not statements, a
workaround is a lambda called in place.
mixin template test(A...){
__gshared a = A;
int dummy = (){ a++; return 0; }();
}
extern(C) void main(){
mixin test!123;
}
Aug 10 2018
On Friday, 10 August 2018 at 13:05:24 UTC, Kagamin wrote:
Mixim template can only introduce declarations, not statements,
a workaround is a lambda called in place.
mixin template test(A...){
__gshared a = A;
int dummy = (){ a++; return 0; }();
}
extern(C) void main(){
mixin test!123;
}
Except that you can't use tuples for that, a working sample:
mixin template test(alias A){
__gshared a = A;
int dummy = (){ a++; return 0; }();
}
extern(C) void main(){
mixin test!123;
import core.stdc.stdio;
printf("%d", a);
}
Aug 10 2018
On Friday, 10 August 2018 at 13:05:24 UTC, Kagamin wrote:
Mixim template can only introduce declarations, not statements,
a workaround is a lambda called in place.
mixin template test(A...){
__gshared a = A;
int dummy = (){ a++; return 0; }();
}
extern(C) void main(){
mixin test!123;
}
Thanks, this work for me. my second example should be a dmd bug
? (ldc work)
Aug 10 2018









Kagamin <spam here.lot> 