From my reading of Devel::Declare, it uses (and exposes) the same parsing routines that Perl uses, so for subexpressions, it doesn't have to reimplement that. In that way it sure is better than Filter::Util, which has to reimplemented Perl string parsing and POD parsing.
As the code generation is (conveniently) still string-based, I imagine fun things could happen if you inject string snippets that need parsing by another Devel::Declare-based filter, as you're then dependent on these filters having been loaded in the right order. But maybe Devel::Declare invokes the filter chain in a loop so you can send of Perl into an infinite loop by having mutually recursive filters instead.