Я не могу придумать вескую причину для того, чтобы заставить константы быть публичными.
Ну, константы - это статические определения, привязанные к классу и не созданные объекты Они могут быть адресованы только с помощью classname::constname
, и их нельзя изменить. Разумеется, они являются частью плана класса, и поэтому нет смысла применять к ним правила видимости.
Это только мое довольно субъективное мнение, хотя. Интересно посмотреть, подходит ли что-нибудь, основанное на теории жестких ООП.