Определения вложенных пространств имен с именованными пространствами имен

Недавно, работая с функцией определения вложенного пространства имен, добавленной в C++17, я натолкнулся на сценарий, который заставил меня задуматься. При обычном вложенном определении пространства имен серия именованных пространств имен может быть вложена следующим образом:

// Before

namespace A {
  namespace B {
    namespace C {
    }
  }
}

// After

namespace A::B::C {
}

Это удобно для объединения многих названных определений пространств имен в одно определение, как это делается по замыслу. Однако для некоторых ситуаций, а именно с безымянными пространствами имен, этот шаблон разбивается, например, в следующем примере:

// Before

namespace A {
  namespace B {
    namespace { // Unnamed
    }
  }
}

// After

namespace A::B {
  namespace { // Forced to remain as a separate definition
  }
}

После изучения того, почему это так, или если бы кто-то спрашивал об этом раньше, я не мог получить такую ​​информацию по этому вопросу, и стандарт, по-видимому, дает лишь небольшую сводку того, какие вложенные пространства имен определены, как в §10.3.1.9, без какого-либо упоминания. преднамеренного исключения безымянных пространств имен. Учитывая то, что представлено в действительном определении и примерах, включение безымянных пространств имен в более компактную форму написания определений пространств имен кажется более совместимым с базовым намерением объединить несколько определений в одно.

Была ли какая-либо причина не предоставлять какой-либо метод, позволяющий разрешить такое поведение, например нежелание вводить дополнительный экзотический синтаксис, или это было упущением в его дизайне?

0 ответов

Другие вопросы по тегам