这似乎是合法的
template<const int& x, int y>void fn() {}
但我怎么称呼它?如果是y类型,则fn<1>()
似乎有效(但不是fn<intvar>()
)。 const&amp;让我感到困惑,尤其是当intvar似乎无法使用int y时。这完全错了/非法吗?我正在使用clang 3.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放宽了对外部链接的要求,但我试过的编译器仍然抱怨它是否没有。