3 Stimmen

Wo legt der C++ 98 Standard fest, dass lokal deklarierte Template-Namen nicht abhängig sind?

Laut dieser Seite: http://womble.decadent.org.uk/c++/template-faq.html#nicht-abhängig "Nicht abhängige Namen sind die Namen, die nicht von den Parametern der Vorlage abhängen, sowie der Name der Vorlage selbst und die darin deklarierten Namen (Mitglieder, Freunde und lokale Variablen)".

Dies scheint durch die Tatsache gestützt zu werden, dass der folgende Code als gültig angesehen wird (von LLVM/Comeau)

template<typename T>
struct Template
{
    typedef int I;
    typedef Template::I Type; // 'Template' is NOT dependent
    typedef Template<T>::I Type2; // 'Template<T>' is NOT dependent
    Template<T>* m;
    void f()
    {
        m->f(); // 'm' is NOT dependent
    }
};

Nachdem ich einige Zeit damit verbracht habe, den C++ 98-Standard zu lesen, kann ich nicht finden, wo dieses Verhalten spezifiziert ist. Ich würde erwarten, dass dies unter "temp.nondep" erwähnt wird.

1voto

Öö Tiib Punkte 10171

Der C++98-Standard definiert nicht, was genau mit "nicht-abhängigen", "nicht-abhängigen" oder "nicht-abhängigen" Namen gemeint ist (alle drei Formen sind in Standardtexten zu finden).

Stattdessen wird in 14.6 [temp.res] und seinen Unterkapiteln definiert, welche Namen und Typen von Vorlagenargumenten abhängig sind. Einfache Logik angewandt ... alles, was nicht als abhängig bezeichnet wird, ist nicht abhängig. Nur das Lesen von 14.6.3 [temp.nondep] hilft nicht weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X