gpt4 book ai didi

c++ - 为什么 const A & 不绑定(bind)到模板参数中的 A()?

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:00 25 4
gpt4 key购买 nike

我正在尝试执行此模板实例化,但它不起作用。我收到错误:

prog.cpp:7:15: error: template-id 'f<const A&, A()>' for 'void f()' does not match any template declaration

template <class T, T> void f() {}

struct A {};

template void f<const A &, A()>();

int main() {}

这很奇怪,因为当我在 main 中这样做时它起作用了:

int main() {
const A &a = A(); // no error
}

那么为什么它在模板行中不起作用呢?

最佳答案

Non-type template parameters 可能重复

这些是模板非类型参数的规则

A non-type template-parameter shall have one of the following (optionally cv-qualified) types:

  • integral or enumeration type,
  • pointer to object or pointer to function,
  • lvalue reference to object or lvalue reference to function,
  • pointer to member,
  • std::nullptr_t.

您传递的是一个 RValue(临时对象等,无法分配),它不属于任何这些可能性。

编辑:

看起来它实际上被解释为函数类型,但您的模板签名需要类型为 A 的非类型参数(完全是 const A&)

关于c++ - 为什么 const A & 不绑定(bind)到模板参数中的 A()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com