使用"const&"调用模板?

invoke template with `const&`?

本文关键字:const 使用 调用      更新时间:2023-10-16

这似乎是合法的

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

template<const int& x, int y>void fn() {}
int x = 0;
int main() {
    fn<x,2>();
}

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

相关文章: