If a function template
f
is called in a way that requires a default argument to be used,
the dependent names are looked up, the semantics constraints are checked,
and the instantiation of any template used in the default argument
is done as if the default argument had been
an initializer used in a function template specialization with the same scope,
the same template parameters and the same access as that of the function template
f
used at that point, except that the scope in which a closure type is
declared (
[expr.prim.lambda.closure]) – and therefore its associated namespaces –
remain as determined from the context of the definition for the default
argument
.