2010-11-02 5 views
12

Ich versuche, Informationen über Vorlage Schlüsselwort als Disambiguator verwendet, aber es gibt nichts darüber. Wahrscheinlich suche ich falsche Suchbegriffe, aber es gibt nichts wie .template oder -> template im Standard. Google zeigt nur GCC-Probleme von verschiedenen Foren, aber nicht wirklich, wofür es verwendet wird.Vorlage Disambiguator

Code wie das konnte nicht kompilieren ohne Vorlage Schlüsselwort in Zeile 11 (auf GCC), aber ich bin nicht ganz sicher, dass dies entspricht dem Standard.

template<typename B> 
struct S1 
{ 
    template<typename T> void test() {} 
}; 

template<typename T> 
struct S2 
{ 
    S2() 
    { 
     S1<T>().template test<int>(); 
    } 
}; 

int main() 
{ 
    S2<int>(); 
} 

Also meine Frage ist: Warum tut Vorlage Begriff hier verwendet wird, welche Art von Mehrdeutigkeit gibt, ohne das Keyword ist und wo kann ich gelesen, dass (ich würde wirklich Link zu Standard schätzen).

Danke.

+0

@ Prasoon: Ich weiß, dass dort viele Frage, wo die Verwendung des 'template'-Schlüsselwortes die Antwort war, aber ich kann keine Frage direkt finden, die danach fragt. –

+0

@ Space_C0wb0y: Entschuldigung, ich habe meinen vorherigen Kommentar gelöscht. –

+0

Vielleicht möchten Sie auch lesen: http://stackoverflow.com/questions/3786360/confusing-template-error/3786726#3786726 –

Antwort

8

Kurze Antwort: Weil der Standard sagt so

ISO C++ 03 14.2/4

Wenn der Name eines Mitglieds Template-Spezialisierung nach erscheint. oder -> in einem Postfix-Ausdruck oder nach einem Nested-Name-Spezifizierer in einer qualifizierten ID, und der Postfix-Ausdruck oder die qualifizierte ID hängt explizit von einem Template-Parameter (14.6.2) ab, muss der Member Template-Name sein Präfix der Keyword-Vorlage. Andernfalls wird angenommen, dass der Name ein Nicht-Template nennt.

P. S:

Ohne diese zusätzliche Verwendung von Vorlage, der Compiler nicht weiß, dass das weniger als Token (<), die nicht wirklich „kleiner als“ sondern der Anfang einer Template-Argument Liste folgt.

+4

Wahrscheinlich muss ich meine PDF-Lese-Software ändern :) direkt nach diesem Text gibt es Beispiel mit -> Vorlage, die meine Software nicht gefunden hat. Danke vielmals. Das ist es. – confucius