Default arguments are shortcut notations for the caller of function. So, when the function executes, the construction is already complete.
Thus, noexcept
should be sufficient.
In the standard [dcl.fct.default] states:
If an initializer-clause is specified in a parameter-declaration this
initializer-clause is used as a default argument. Default arguments will be used in calls where trailing arguments are missing.
Example:
the declaration
void point(int = 3, int = 4);
declares a function that can be called with zero, one, or two arguments of type int. It can be called in
any of these ways:
point(1,2);
point(1);
point();
The last two calls are equivalent to
point(1,4)
and point(3,4)
, respectively.
Also there is a note (in [intro.execution] Program execution):
Subexpressions involved in evaluating default arguments (8.3.6) are
considered to be created in the expression that calls the function, not the expression that defines the default
argument