【发布时间】:2020-11-13 14:54:54
【问题描述】:
此 C++ 代码无法编译,您收到错误“候选函数模板不可行:第一个参数 ('const int32_t' (aka 'const int')) 将丢失 const 限定符”
我知道我可以通过为 Func(const T& value) 添加重载来解决这个问题,但我很想知道为什么这不能编译?
template <typename T>
void Func(T&& value)
{
// Do stuff
}
struct Obj
{
int32_t Id{};
};
int main(int argc, char* argv[])
{
const Obj i{};
Func<int32_t>(i.Id);
}
【问题讨论】:
-
只需从代码的倒数第二行删除
<int32_t>,因为这有效地实例化了函数Func(int32_t&&)。另一方面,如果你把它放在一边,你可以从模板参数推导中受益。