n3337 13.1
  [ Note: As specified in 8.3.5, function declarations that have
  equivalent parameter declarations declare the same function and
  therefore cannot be overloaded: ffer only in the presence or absence
  
  — Parameter declarations that di3
  of const and/or volatile are equivalent. That is, the const and
  volatile type-specifiers for each parameter type are ignored when
  determining which function is being declared, defined, or called. [
  Example: 
typedef const int cInt;
int f(int);
int f(const int); // redeclaration of f(int)
int f(int) { /* ... */ } // definition of f(int)
int f(cInt) { /* ... */ } // error: redefinition of f(int)
  
  — end
  example ] Only the const and volatile type-specifiers at the outermost
  level of the parameter type specifica- tion are ignored in this
  fashion; const and volatile type-specifiers buried within a parameter
  type specification are significant and can be used to distinguish
  overloaded function declarations.124 In particular, for any type T,
  “pointer to T,” “pointer to const T,” and “pointer to volatile T” are
  considered distinct parameter types, as are “reference to T,”
  “reference to const T,” and “reference to volatile T.”