使用指南在函数签名中推导模板参数

Template argument deduction in function signature using guide

假设你有一个 class A (C++17):

template<class T>
struct A
{
    A() = default;
    A(T t) : val(t)
    {
    }
    A operator*(A a)
    {
        return A(a.val * this->val);
    }

    T val;
};

然而,99% 的时间 A 的值类型将是 int,因此您使用推导指南来减少冗长:

A()->A<int>;

太好了,现在您可以在没有模板列表的情况下定义变量了:

A myVar;

我遇到的问题是它似乎在涉及函数签名时出现故障,例如以下需要使用模板参数列表:

auto ASquared = [](A a, A b) { return a * b; };

error C2955: 'A': use of class template requires template argument list

当我想让它推断出 AA<int>

我的问题是:这是一个固有的限制,还是我只是缺少可以使此语法起作用的不同推导指南?

语言不允许这样做。演绎不会发生在函数签名中,因为没有什么可以演绎的。