【问题标题】:Class template parameter type deduction inside another class scope [duplicate]另一个类范围内的类模板参数类型推导[重复]
【发布时间】:2020-11-10 14:06:25
【问题描述】:

我在一个简单的类模板中遇到了一些类型推导指南问题,即主函数范围内的实例化问题,但在另一个类中未能做到这一点。

这是一个例子:

template<class T>
struct X
{
    X(T&)
    {
    }
};

struct User
{
    X x{1}; // error: invalid use of template-name 'X' without an argument list
};

int main()
{
    int i;
    auto x = X(i); // OK
    (void)x;
}

我有点困惑,为什么会这样以及如何解决这个问题。 有什么想法吗?

【问题讨论】:

  • 澄清一下,您希望X x{1} 推导出X&lt;int&gt;?
  • 您的X 构造函数采用T&amp; 而不是T。这似乎与您的问题无关。

标签: c++ c++17 template-argument-deduction


【解决方案1】:

Clangd 提供了更有意义的错误消息,这可能会让您(或我,或其他任何人)更容易在网上搜索答案,

Use of class template 'X' requires template arguments;
argument deduction not allowed in non-static struct member

原因已经很好解释了here

【讨论】:

  • 更好地标记为重复,而不是重复其他地方存在的答案。没关系,只是说
  • 是的,clangd message 的附加价值可能已经放在评论中了。
  • 确实如此。 OP 已经知道这是不允许的,问题是为什么以及如何解决。虽然错误信息真的很有趣;)
  • 既然 OP 询问 我有点困惑,为什么会这样以及如何解决这个问题?,我认为我的回答(之前包括其中的副本链接)部分回答了这个问题,不是吗?我希望有趣的消息能给更多的分数:P
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多