Например, вложенный вариант не может быть объявлен заблаговременно, что может привести к проблемам с циклической зависимостью в больших проектах.
Честно говоря, это, вероятно, самая сильная техническая причина.
Вы также обнаружите, что Аргумент-зависимый поиск зависит от общей области:
namespace N
{
struct A
{
enum class B { aB };
friend void f(B);
};
}
void test(N::A::B x)
{
f(x); // f found by ADL, since x's type is a member of A
}
Другой пример может демонстрировать целый набор классов, похожих на Stream
, каждый из которых имеет свое собственное сходное, но отличающееся перечисление enum. Наличие его в качестве члена немного облегчает использование указанного перечисления с областью видимости из контекста шаблона (T::OpenMode
!). Но в этом сценарии псевдонимы типов членов сделают довольно простым удержание перечисления enoped вне класса.