インラインアセンブラとテンプレート引数

まったくたいしたことじゃないんだけど
C++でテンプレートクラスなり関数なり使ったときに
インラインアセンブラを使って引数を使うとコンパイラに怒られる


template
void f()
{
_asm
{
mov eax,dword ptr[n]
}
}
そりゃそうだ。大体コンパイラはテンプレート引数の中身を即値で扱うから
変数みたいにアドレスがあるとは限らないわけだし。
かといって変数をわざわざ用意するのもせっかくテンプレート引数にして
を無駄にしているようでいや過ぎる。

template
void f()
{
unsigned long tn=n;
_asm
{
mov eax,dword ptr[tn]
}
//mov dword ptr [tn],100h
//mov eax,dword ptr [tn]
}

そこでenumを利用する。


template
void f()
{
enum
{
tn=n
};
_asm
{
mov eax,dword ptr[tn]
//mov eax,100h ;もち即値!
}
}
んーこれはまさにEnumHackじゃないのか?
誰かコンパイラ君が怒らない簡単な方法を知ってたら教えてくださいな。
コンパイラはVC7のみですがorz