$14.3.2 - "... Аргумент шаблона для непигового шаблона-шаблона без шаблона должен быть одним из:
... постоянное выражение (5.19), которое обозначает адрес объекта со статической продолжительностью хранения и внешней или внутренней привязки или функцией с внешней или внутренней связью..."
В приведенном ниже коде я не понимаю, почему "name2" и "name3" не разрешены как аргументы шаблона non type. Я использую gcc 4.7.2 в Windows.
Оба "name2" и "name3" являются именами массива и, следовательно, являются постоянными выражениями. Дальше 'name2' имеет внутреннюю связь, а 'name3' имеет как статическую, так и внутреннюю связь.
template<char const *p> void f()
{
}
char name1[] = "Hi";
static char name2[]= "Hi";
const static char name3[]= "Hi";
char *name4 = "Hi";
int main()
{
f<name1>();
f<name2>();
f<name3>();
f<name4>();
}