次の関数テンプレートを検討してください。
template<typename T>
unsigned long f(void *) { return 0;}
ここで、 と のアドレスを次のように出力f<A>しf<B>ます。
std::cout << (void*)f<A> << std::endl;
std::cout << (void*)f<B> << std::endl;
MSVS10 でコンパイルした場合、同じアドレスが表示されるのはなぜですか? それらは 2 つの異なる機能ではないため、異なるアドレスを出力する必要がありますか?
更新しました:
ideone では、別のアドレスが出力されることに気付きました。関数はまったく依存しないため、MSVS10 はコードを最適化し、T同じ関数を生成します。これに関する@Markの回答とコメントは貴重です。:-)