Best to describe it using an example. Here is a copy of the post I've put in D forum: I made the following example to see how far can inline asm blocks use template args: (Note: This bugzilla is about statement #1 only. For #4, I'll open another one) ======================================== void asm_template(T)(T Tval,T* pDest) { asm{ fld Tval; mov EAX,pDest; fstp T ptr[EAX]; //#1 fstp float ptr[EAX]; //#2 mov EDX,T.sizeof; //#3 mov ECX,float.sizeof; //#4 }//asm }//asm_template void main() { float f1=4.0; float f2=5.0; asm_template!(float)(f1,&f2); } ======================================== Here is the compilation result of the 4 statements marked above: #1: ERROR: "cannot use type float as an operand" #2: OK #3: OK!!! #4: ERROR: "ptr expected" For me, if #1 would be illegal, then the error should not have mentioned "type float". In other words, why would it fail if T is correctly interpreted to float? In conclusion, it would make sense if such statement would be accepted, thus enabling writing general ASM code.
The sizeof issue (line 4) is already opened (Issue # 1252).
Unfortunately, the grammar accepted by the inline assembler for expressions is not the regular D grammar. It's its own animal, for compatibility with the Intel syntax. Improving it would be an enhancement request.
Well, it was easy for me to figured out that it's tricky to correct :) I'm not currently using pure assembly but I'll vote for it anyway. Guess it would require a certain number of votes to be taken into consideration.