#include using namespace std; typedef double doub; double i = 0.0; const double *dp = &i; void f(const double d) { cout << "double: " << d << endl; } void f(double l) { cout << "long: " << l << endl; } // note use of const here is enough to disambiguate: void f(double *d) { cout << "pointer version 1: " << *d << endl; } void f(const double *d) { cout << "pointer version 2: " << *d << endl; } int main(void) { f(1L); f(1.0); f(i); f(&i); f(dp); //f(1); }