struct A
{
enum InnerEnum { X };
A(InnerEnum x)
{}
};
int main()
{
A a(X);
}
Kompilator narzeka: error C2065: 'X' : undeclared identifier
Dlaczego C++ 11 nie obsługuje wyszukiwania nazw w ten sposób?
Kompilator wie, jaki typ parametr konstruktora jest, więc kiedy mijam X jako argumentu, kompilator powinien wiedzieć, że jest to ważny argument.
Wiem, że to nie jest ADL (nazwisko zależne od nazwiska, znane również jako Koenig Lookup), ale myślę, że jest użyteczny i bardzo przydatny. Ponieważ nie muszę pisać w następujący sposób:
A a(A::X);
Myślę, że reguła ADL powinna być uogólniona do takiego przypadku.
Mam rację?
Jest to odwrotność ADL ... FDL (wyszukiwanie zależne od funkcji). –
Czy zastanawiałeś się, w jaki sposób miałoby to zastosowanie, gdy masz również zmienną lokalną o nazwie "X"? I bez względu na sposób, w jaki czytam twoje pytanie, mówisz, że jest to nieprawidłowe C++ i pytasz, czy standard C++ powinien się zmienić. To złe miejsce. – hvd
Dzięki, hvd. Dałeś nam przekonujące uzasadnienie. – xmllmx