Why do two functions have the same address?
Consider this function template: template<typename T> unsigned long f(void *) { return 0;} Now, I print the addresses of f<A> and f<B> as: std::cout << (void*)f<A> << std::endl; std::cout << (void*)f<B> << std::endl; Why do they print the same address if compiled in MSVS10? Are they not two different functions and therefore should print different addresses? Updated: I realized that on ideone, it prints the different address. MSVS10 optimizes the code, as the function doesn't depend on T in any way, so it produces same function. @Mark's answer and comments on this are valuable. :-) Mark Ransom