A filename glob will only be expanded if there's a matching file in the current directory - otherwise (barring any `nullglob` or `failglob` shell options) it will be passed as-is. So:
$ echo \\+.*TODO
\+.*TODO
$ printf '+foo\
+TODO\
+bar' | grep \\+.*TODO
+TODO
but
$ touch '\+.abcTODO'
$ echo \\+.*TODO
\+.abcTODO
$ printf '+foo\
+TODO\
+bar' | grep \\+.*TODO
$ printf '+foo\
+TODO\
+bar' | grep \\+.\*TODO
+TODO