C++ not-type模板指针参数

使用模板传递指针,代码如下
template class X {
public:
void f() {
*T = 1;
}
};

namespace A {
volatile uint8_t* y = ((volatile uint8_t*) (0x3B));
volatile uint8_t z = 5;
}

int main(void) {
*A::y = 5;
X x;
x.f();
}

使用GCC编译器,错误信息:
error: 'A::y' is not a valid template argument because 'A::y' is a variable, not the address of a variabl。请问什么原因?

http://blog.csdn.net/caroline_wendy/article/details/17219921

http://blog.csdn.net/xiexievv/article/details/8487132

在C++标准上找到下面一段话:
the address of an object or function with external linkage, including function templates and function
template-ids but excluding non-static class members, expressed as & id-expression where the & is
optional if the name refers to a function or array, or if the corresponding template-parameter is a
reference;
大概意思是:非类型参数可以是对象或者函数(外部可链接)的地址,包括函数模板和函数模板ids,但是排除非静态类成员,表达格式:& id-expression,其中id-expression就是对象或者函数的名称,&可以在名称是函数或者数组的情况下省略,在相应的模板参数是引用的情况下省略