Sto tentando di comprendere più a fondo la sintassi e la semantica dei modelli immaginando costrutti arcani. Credo che la seguente sintassi non è consentita dallo standard C++ 11:Dove nello standard C++ 11 è vietato 'modello <typename T> classe A {...}; modello <typename T> classe A <int> {...}; ' (se dovunque)?
template <typename T>
class A
{...};
// phony "specialization"
template <typename T>
class A<int>
{...};
Tuttavia, non riesco a trovare nello standard C++ 11 in cui non è consentita questa sintassi.
Sono corretto che la sintassi mostrata non è consentita dallo standard C++ 11? In tal caso, dove si può scoprire che la sintassi non è consentita?
Questo è l'errore che si ottiene con clang ++: "errore: la specializzazione parziale di 'A' non utilizza nessuno dei suoi parametri di modello". Quindi suppongo che devi cercare la sezione sulla specializzazione parziale, relativa all'utilizzo dei suoi parametri del modello. PS: g ++ dice semplicemente "errore: parametri modello non deducibili in specializzazione parziale:" – vsoftco
@vsoftco Supponiamo di avere 'template classe A {T t; }; ' –
@Yakk forse la risposta è che è dovuto al fatto che è logicamente impossibile per il costrutto avere un senso che non è consentito, o che il fatto che non sia descritto da nessuna parte come un costrutto * permesso * che lo rende non consentito, piuttosto che è specificamente vietato ovunque. –