Namespaced classes cannot contain an underscore
While working on https://github.com/civicrm/civicrm-core/pull/16947 I tried to add two classes:
Civi\Api4\Query\SqlFunctionCONCAT
Civi\Api4\Query\SqlFunctionGROUP_CONCAT
The first worked and the second did not. I think this is due to our autoloader getting confused by underscores.
In traditional (non-namespaced) classes, an underscore in the class name corresponds to a directory separator. However, in namespaced classes, the directories correspond to namespaces, not underscores. So IMO underscores should be allowed in class names.