#include #include using namespace std; inline void f(int *p) {cout << "f(int *) " << *p << "\n";} inline void f(const int *p) {cout << "f(const int *) " << *p << "\n";} template inline void g(const T& t) {cout << "g(const T&) " << t << "\n";} template inline void g(T *p) {cout << "g(T *) " << *p << "\n";} template inline void g(const T *p) {cout << "g(const T *) " << *p << "\n";} template inline void h(T t) {cout << "h(T t) " << t << "\n";} template <> inline void h(int *p) {cout << "h(int *) " << *p << "\n";} template <> inline void h(const int *p) { cout << "h(const int *) " << *p << "\n"; } int main() { int i = 10; int *p = &i; f(p); g(p); h(p); return EXIT_SUCCESS; }