这似乎是合法的
template<const int& x, int y>void fn() {}
但是我该怎么称呼它?如果它是 y 类型fn<1>()
似乎只工作(但不是fn<intvar>()
)。const& 让我感到困惑,尤其是当 intvar 似乎不适用于 int y 时。这是完全错误/非法的吗?我正在使用clang 3.2
模板参数的引用和指针需要外部链接(对于 C++11,需要内部链接,但需要静态存储持续时间)
因此,如果您必须将其const int &
用作模板参数,则需要将其作为extern
全局范围。
extern const int a = 2;
fn<a,1>();
参考int
具有静态存储持续时间和外部链接的an:
template<const int& x, int y>void fn() {}
int x = 0;
int main() {
fn<x,2>();
}
我认为 C++11 已经放宽了对外部链接的要求,但是我尝试过的编译器如果没有,仍然会抱怨。