ParamType is a Reference or Pointer, but not a Universal Reference. If
expr’s type is a reference, ignore the reference part. Then pattern-match
expr’s type against ParamType to determine T.
If expr is an lvalue, both T and ParamType are deduced to be
lvalue references. although ParamType is declared using thesyntax for an rvalue reference, its deduced type is anlvalue reference.
If expr is an rvalue, the "normal" (i.e., Case 1) rules apply.
ParamType is Neither a Pointer nor a Reference. As before, if expr’s type
is a reference, ignore the reference part. If, after ignoring expr’s
reference-ness, expr is const, ignore that, too. If it’s volatile, also ignore
that.