To summarize the discussion in #12261: - There are 3 ways to write catch-all patterns for match types (`case _ =>`, `case Any =>`, and `case ? =>`) - All of them are already in use in the community build (see [`case ? =>` in scodecs](https://github.com/scodec/scodec/blob/c568b493f5359ee1f43b979205150ebbdeb5ddfa/shared/src/main/scala/scodec/DropUnits.scala#L39)) - The current syntax is quite inconsistent: ```scala type A = _ // NOT OK type B = ? // NOT OK type M0[X] = X match { case ? => String } // OK type M1[X] = X match { case Any => _ } // OK type M2[X] = X match { case Any => ? } // OK val a = "" match { case _: _ => () } // OK val b = try { } catch { case _: ? => () } // OK ``` - Disallowing those standalone `?` types would be a relative simple change to the parser (5a81d5aaea3862e58f2c6acbee76c67e8b3cce8b / 8968cc1124b08fb7cf452af0d496e4b8f49a6cfd)