Nicht typisierter Referenzparameter / Argument

Warum kann das Template-Argument einer Nicht-Typ-Referenz keine andere Referenz sein (g ++ 4.8.1):

template <int& N> void test() { }

int x = 5;
int& p = x;

int main(){
    test<x>(); //compiles fine
    test<p>(); //error: could not convert template argument 'p' to 'int&'|  
}

Ich kann nicht sehen, wo aus dem Standardp verletzt irgendetwas, dies schienen die relevantesten Abschnitte zu sein (N3337):

[14.3.2] [.1] Ein Template-Argument für einen Nicht-Template-Template-Parameter ohne Typ muss eines der folgenden sein:

- für einen Nicht-Typ-Template-Parameter vom Typ Integral oder Aufzählung ein konvertierter konstanter Ausdruck (5.19) des Typs des Template-Parameters; ode

- der Name eines nicht typisierten Template-Parameters; ode

- Ein konstanter Ausdruck (5.19), der die Adresse eines Objekts mit statischer Speicherdauer und externer oder interner Verknüpfung oder einer Funktion mit externer oder interner Verknüpfung angibt, einschließlich Funktionsschablonen und Funktionsschablonen-IDs, jedoch ohne nicht statische Klassenmitglieder (Klammern werden ignoriert) als & id-Ausdruck, außer dass das & weggelassen werden kann, wenn der Name auf eine Funktion oder ein Array verweist, und weggelassen werden muss, wenn der entsprechende Template-Parameter eine Referenz ist; oder ....

[. 4]

[Hinweis: Temporäre Werte, unbenannte l-Werte und benannte l-Werte ohne Verknüpfung sind keine akzeptablen Vorlagenargumente, wenn der entsprechende Template-Parameter einen Referenztyp hat.

[. 5]

- Für einen Nicht-Typ-Vorlagenparameter vom Typ Verweis auf Objekt gelten keine Konvertierungen. Der Typ, auf den sich die Referenz bezieht, ist möglicherweise qualifizierter als der (ansonsten identische) Typ des Templatearguments. Der template-Parameter ist direkt an das template-Argument gebunden, das ein lWert sein soll.

p sollte als ein Wert betrachtet werden, nicht wahr? Das einzige andere, woran ich denken konnte, war vielleicht ein Mangel an Verknüpfungen für Referenzen, aber das Hinzufügen vonextern int& p = x hat es auch nicht behoben.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage