Почему имена, представленные в объявлении extern, допускаются только из самого внутреннего пространства имен? К какому осложнению это привело бы, если бы они не были? Или это просто потому, что эта часть стандарта была скопирована из стандарта C, где нет пространства имен?
Пожалуйста, см. Соответствующую часть стандарта
РЕДАКТИРОВАТЬ: Anпример сценария, в котором квалификация была бы удобной: использование x
в шаблоне функции f
в пространстве имен ns
, где x
определено где-то в глобальном пространстве имен и не желательно вводить (вне определения функции) во всех единицах перевода, которые # включают заголовок с f
.
namespace ns
{
template <typename> void f()
{
// extern int ::x; // ill-formed
extern int x; // refers to ns::x, which is not the case :(
++x;
}
}