Just check
i_: 0 | 1 // FullForm
In v12.0 or earlier the output is
Alternatives[Optional[Pattern[i, Blank[]], 0], 1]
But in v12.1 the output becomes
Optional[Pattern[i, Blank[]], Alternatives[0, 1]]
Seems that the precedence between : and | varies in v12.1. Is this an intentional change, or a bug?
Some more observations. Behavior in v3:
Behavior in v2.1:




ToExpression["i_: 0 | 1 // FullForm"]. It parses the same way as in 12.1.1. I expect this fixed an inconsistency between the FE's and the kernel's parser. – Szabolcs Jun 30 '20 at 06:14(i_ : 0) | 1ori_ : (0 | 1). – Szabolcs Jun 30 '20 at 06:23detoaein your first comment, it's a cute use ofTimes, but, imho, the kind of cute that hides a bug:(2 u)[t] /. detoae— an extremely rare bug that is hardly likely to occur since(2 u)[t]is almost certainly a mistake, though you will find Q&A on site where users want to take a linear combination of functions and plug inx(there was one yesterday or the day before). I just bite the bullet and write two rules, one for derivatives and one for functions, because it's easier to understand. – Michael E2 Jun 30 '20 at 12:01