首页 > 解决方案 > 另一个类作用域内的类模板参数类型推导

问题描述

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

这是一个例子:

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;
}

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

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

解决方案


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

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

其原因在这里得到了很好的解释


推荐阅读