3

这似乎是合法的

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

但是我该怎么称呼它?如果它是 y 类型fn<1>()似乎只工作(但不是fn<intvar>())。const& 让我感到困惑,尤其是当 intvar 似乎不适用于 int y 时。这是完全错误/非法的吗?我正在使用clang 3.2

4

2 回答 2

2

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

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

extern const int a = 2;
fn<a,1>(); 
于 2013-09-09T18:46:59.613 回答
1

参考int具有静态存储持续时间和外部链接的an:

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

int x = 0;

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

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

于 2013-09-09T18:48:32.087 回答