Używanie deklaracji dla członka klasy jest deklaracją członka (C ++ 2003)
Punkt 7.3.3. standardu C ++ 2003 stwierdza, że
Używanie deklaracji dla członka klasy jest deklaracją członka.
Oznacza to, że następujący błąd powoduje błąd składniowy:
struct S1
{
static int var1;
};
using S1::var1;
Podczas gdy następująca kompiluje dobrze:
namespace N2
{
int var2;
}
using N2::var2;
Czy ktoś zna uzasadnienie (jeśli takie istnieje)?
Co więcej, standard podaje wyraźny przykład ze statycznym elementem danych struktury i mówi, że powinien on powodować błąd składniowy. MS C ++ podaje ten błąd:
cpptest1.cxx (9): błąd C2885: „S1 :: var1”: niepoprawna deklaracja użycia w zakresie nieklasowym
Nadal nie jest jasne, dlaczego należy to zabronić.