Нетипичный ссылочный параметр / аргумент

Почему аргумент шаблона ссылки не-типа не может быть другой ссылкой (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&'|  
}

Я не вижу, где из стандартаp нарушает что-либо, эти разделы казались наиболее актуальными (N3337):

[14.3.2] [.1] Шаблонный аргумент для нетипового, нешаблонного шаблона-параметра должен быть одним из:

- для нетипового шаблона-параметра целочисленного или перечислимого типа преобразованное константное выражение (5.19) типа шаблона-параметра; или же

- имя нетипового шаблона-параметра; или же

- константное выражение (5.19), которое обозначает адрес объекта со статической продолжительностью хранения и внешней или внутренней связью или функцию с внешней или внутренней связью, включая шаблоны функций и идентификаторы шаблонов функций, но исключая нестатические члены класса, выраженную ( игнорируя круглые скобки) как & id-выражение, за исключением того, что & может быть опущено, если имя относится к функции или массиву, и должно быть опущено, если соответствующий параметр шаблона является ссылкой; или же .....

[0,4]

[Примечание. Временные значения, неназванные lvalues ​​и именованные lvalues ​​без связи не являются допустимыми аргументами шаблона, когда соответствующий параметр шаблона имеет ссылочный тип.

[0,5]

- Для нетипового шаблона-параметра типа ссылка на объект преобразования не применяются. Тип, на который ссылается ссылка, может быть более квалифицированным по cv, чем (иначе идентичный) тип шаблонного аргумента. Параметр шаблона связан непосредственно с аргументом шаблона, который должен быть lvalue.

p следует считать lvalue не так ли? Единственное, о чем я мог подумать, это, возможно, отсутствие связи для ссылок, но добавлениеextern int& p = x не исправить это тоже.

Ответы на вопрос(2)

Ваш ответ на вопрос