Will Robertson wrote:
> Considering that the things that \ExplSyntaxXYZ do are not expandable, I
> think it would be correct to define them \protected.
> 
> Speaking generally, however, I'm not sure how much expansion we should
> be restricting. Lars in particular, recently, has been advocating
> keeping things expandable (and LuaTeX should broaden the applicability
> of what can be done there) but at this stage I've got nothing much to
> say :)

I perhaps should have suggested two general cases:

1) Design functions which clearly are expandable (such as \IfBooleanTF
or the version of \IfNoValue in xparse-alt): these should left alone as
they will behave "nicely".

2) Design functions which are not expandable (at least under pdfTeX or
XeTeX: LuaTeX raises lots of issues, I suspect). This includes
\ExplSyntaxOn/Off, \DeclareDocumentCommand and so on. I'd suggest that
these should be \protected.

I'm not saying it's likely that \edef-ing things like
\DeclareDocumentCommand is likely, but that it seems more consistent.
--
Joseph Wright