Two parameter lists can be identical, even if they don’t look the same:
// each pair declares the same function
Record lookup(const Account &acct);
Record lookup(const Account&); // parameter names are ignored
typedef Phone Telno;
Record lookup(const Phone&);
Record lookup(const Telno&); // Telno and Phone are the same type
In the first pair, the first declaration names its parameter. Parameter names are only a documentation aid. They do not change the parameter list.
In the second pair, it looks like the types are different, but Telno
is not a new type; it is a synonym for Phone
. A type alias (§ 2.5.1, p. 67) provides an alternative name for an existing type; it does not create a new type. Therefore, two parameters that differ only in that one uses an alias and the other uses the type to which the alias corresponds are not different.