Update: With the release of LaTeX2e 2018-04-01 Patch level 2, the following sentence has been added in the paragraph cited below to make the documentation clearer:
More precisely, whenever the content of an
\xdefetc. can contain arbitrary user input not under the direct control of the programmer, one should use
\edef, etc., so that
\protecthas a suitable definition and the user input will not break if it contains fragile commands.
In an attempt to post this answer, I noticed
source2e.pdf says in Section 11.4
The method LaTeX uses for making fragile commands robust is to precede them with
\protect. This can have one of five possible values:
\@unexpandable@protect, for writing a moving argument to a file. So
\protect\foofollowed by a space. This value is also used inside
\marks and other commands which evaluate their arguments fully.
However, I don't understand what "This value is also used inside
\edefs" means here.
\let to be
\@unexpandable@protect inside a
\protected@edef as noted in the aforementioned answer, but I don't think one can alter the definition of
\protect inside an
What's the point of this statement? Do I have some misunderstanding?