Oh that 13.3 is only heating you up on the true thing that is yet to come
(14.8.3).
The only thing that 14.8.3 says about the signature is that it's the
only aspect of a function template specialization that is needed in
order to resolve overloading. The actual description of overloading in
that section is entirely in other terms - again, it's hard to see how
confusion about what a function signature is could prevent proper
understanding of 14.8.3.
....
The using directive messes overload resolution up, see § 7.3.4/7. That
is very important but novices seem always learn to write ...
"An ambiguity exists if the best match finds two functions with the same
signature, ...".
That is an important point that does depend upon the signature. However,
someone who incorrectly thought, as I used to, that the name played no
role in the signature, would not reach an incorrect conclusion because
of that error. That's because overload resolution only comes into play
when the names are the same.
Similarly, someone like me who incorrectly thought that the namespace
played no role in the signature, would not reach an incorrect
conclusion, either. That's because the only way of finding two matching
functions that differ only in their namespaces, without either one
hiding the other, is by use of a using direction, and that paragraph
goes on to say "..., even if one is in a namespace reachable through
using-directives in the namespace of the other." At the very least, that
statement confuses the issue: since the namespace is part of the
signature, how can functions declared in two different namespaces have
the same signature?
The signature is important for other things too. Two functions
with fully same signature are same, so violate ODR; ...
3.5p9 refers to "two names that are the same", "members of the same
namespace or members, not by inheritance, of the same class", and "the
parameter-type-list of the functions ... are identical". You don't need
to understand that those three things mean that the functions have the
same signature, in order to use 3.5p9 to conclude that they denote the
same function.
For function templates, on the other hand, 3.5p9 refers explicitly to
the signature - a correct understanding of 1.3.18 is, therefore, needed
to understand when two different function template declarations denote
the same function template.
... Virtual overrides
must match signature ...
10.3p2 doesn't use the concept of a signature when describing the
requirements for overriding. That's good, because according to 1.3.20,
the class that a member function is a member of is part of it's
signature, so an overrider could never have the same signature as the
function it's overriding. What is actually required is "... same name,
parameter-type-list, ...", among other things. Once again, you don't
need to correctly understand the meaning of "signature" in order to
correctly determine whether one member function meets the requirements
for overriding another.