Использование объявления для члена класса должно быть объявлением члена (C ++ 2003)

Пункт 7.3.3. стандарта C ++ 2003 гласит, что

Using declaration for a class member shall be a member declaration.

Это означает, что следующее дает синтаксическую ошибку:

struct S1
{
    static int var1;
};

using S1::var1;

Пока следующее компилируется нормально:

namespace N2
{
    int var2;
}

using N2::var2;

Кто-нибудь знает обоснование (если таковое имеется) за этим?

Более того, стандарт дает явный пример со статическими данными члена структуры и говорит, что это должно вызвать синтаксическую ошибку. MS C ++ выдает эту ошибку:

cpptest1.cxx(9) : error C2885: 'S1::var1': not a valid using-declaration at non-class scope

До сих пор не ясно, почему это должно быть запрещено.

Ответы на вопрос(1)

Ваш ответ на вопрос