Warum gibt es im folgenden Code keinen schweren Fehler? Typ Alias und Name der Klasse sind genau die gleiche (Compiler clang
):Ausgearbeiteter Typspezifizierer im Typalias
using S = struct S;
struct S {};
S s;
int main()
{
}
Weichen Namen genau in der Definition der Variablen in dem folgenden Code (Symbol oder Typ Alias) verwendet?
using S = struct S {};
int main()
{
S s;
}
Da C und sein 'typedef struct S {} S;' –
'using S = struct S;' verbirgt nicht, aber * definiert * 'S' neu, um ein typedef Name und ein Klassenname zu sein (ein einzelner Name, der zwei Eigenschaften hat). Sie werden oft Leute sagen hören, dass 'mit S = struct S;' zwei Namen einführt und C++ mehrere "symbol spaces" durchsucht, aber so funktioniert es in C++ nicht. Eine aufschlussreiche Diskussion hierzu finden Sie unter http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#407. –