Рассмотрим этот шаблон функции:
template<typename T>
unsigned long f(void *) { return 0;}
Теперь я печатаю адреса f
и f
как:
std::cout << (void*)f<A> << std::endl;
std::cout << (void*)f<B> << std::endl;
Почему они печатают один и тот же адрес, если скомпилирован в MSVS10? Разве это не две разные функции, и поэтому они должны печатать разные адреса?
Обновлено:
Я понял, что на ideone он печатает другой адрес. MSVS10 оптимизирует код, так как функция никоим образом не зависит от T
, поэтому производит ту же функцию. Ответ @Mark и комментарии по этому поводу ценны. : -)