Vorlagenschablonenklasse mit const Vorlagenparameter

8

Ich verstehe nicht, warum das nicht kompiliert:

%Vor%

(Ich finde den Verweis auf den Standard ein wenig kryptisch)

Was muss ich ändern, damit es kompiliert wird?

BEARBEITEN:

Compiler Details (es scheint relevant zu sein):

%Vor%

EDIT2:

Mit Hilfe der Erklärung versuche ich, so etwas zu tun:

%Vor%

Die Technik für nicht-templatete Container finden Sie am Ende dieses Boost-Dokuments: Ссылка

Ich denke, die Lösung besteht nicht darin, die Vorlagen zu schmiegen. Im Nachhinein scheint es offensichtlich.

    
Tom 13.05.2011, 22:56
quelle

4 Antworten

4

Das erste Argument von C ist kein Typ, daher macht es keinen Sinn, einen const-Typ als Argument zu übergeben. Ein Template kann nicht const oder non-const sein, nur Typen können const oder non-const sein. Was bedeutet const B überhaupt?

const int ergibt Sinn. const vector<int> macht Sinn, ebenso wie vector<const int> . Aber was würde const vector bedeuten?

(Vorsicht: Ich war nicht einmal auf Template-Template-Klassen aufmerksam, bevor ich diese Frage sah.)

Um dies konkreter zu machen, stellen Sie sich B und C vor:

%Vor%

c2 wird vom Typ

sein %Vor%

Was würden Sie von c3 erwarten? Das t1 wäre selbst const, während t1.b nicht const ist? Ich denke, das macht Sinn.

    
Aaron McDaid 14.05.2011, 00:23
quelle
2

Dieser genaue Code wird in VS2010 kompiliert. Ich kenne den Compiler nicht, aber ich schlage vor, dass Sie die Fehlerdatenbank des Compiler-Entwicklers einchecken, wenn ein solcher Fehler nicht registriert ist.

Ich werde es in GCC versuchen sehen.

OK GCC (4.5.1) gibt den Fehler. Ich denke, wir müssen auf jemanden mit Standardwissen warten, um zu wissen, ob es Standardverhalten oder ein Bug ist.

CLang (2.8) gibt den gleichen Fehler (mit genau der gleichen Nachricht).

    
Klaim 14.05.2011 00:07
quelle
1

Ich denke, B kann nicht const sein, weil es zu diesem Zeitpunkt keinen echten Typ hat und der Compiler nicht weiß, was const sein soll. Abgesehen davon, dass ich das const weglasse, kann ich keine Lösung finden, um korrekt zu kompilieren, da Template-Vorlagen wirklich ein Schmerz für das Gehirn sind.

    
Christian Rau 13.05.2011 23:03
quelle
1

Meine Wette ist, dass MSVC die const lautlos schluckt wie die const class es .

    
Xeo 14.05.2011 00:34
quelle

Tags und Links