は以下の小さな例を考えてみましょう:'T'のようなテンプレート引数は、常に値として解釈されますか?
template<typename T> void foo(T a) { ... }
struct Bar { ... };
Bar x;
foo(x);
私の質問:foo(x)
が(参照渡しX)foo(const Bar& x)
と解釈することができる、またはそれは常にfoo(Bar x)
(すなわち明示的な値で渡さXと解釈されている任意の場合がありますxのコピー)?
私の具体的なアプリケーションでは、私のコードは、コピーが作成されたことに依存しています(xは別のスレッドで使用され、元のxは範囲外になります)。しかし、私はそれが可能かどうかはわかりません。私はGCC 4.6.1を使用しています。
例で試してみませんか?私はTがintからポインタなどになることができると思います。 –