用`const&`调用模板?

时间:2013-09-09 18:35:02

标签: c++ templates

这似乎是合法的

template<const int& x, int y>void fn() {}

但我怎么称呼它?如果是y类型,则fn<1>()似乎有效(但不是fn<intvar>())。 const&amp;让我感到困惑,尤其是当intvar似乎无法使用int y时。这完全错了/非法吗?我正在使用clang 3.2

2 个答案:

答案 0 :(得分:2)

引用和参考文献需要外部链接。模板参数的指针 (对于C ++ 11,内部链接,但需要静态存储持续时间)

因此,如果必须使用const int &作为模板参数,则需要在全局范围内将其作为extern

extern const int a = 2;
fn<a,1>(); 

答案 1 :(得分:1)

引用具有静态存储持续时间和外部链接的int

template<const int& x, int y>void fn() {}

int x = 0;

int main() {
    fn<x,2>();
}

我认为C ++ 11放宽了对外部链接的要求,但我试过的编译器仍然抱怨它是否没有。