lambda 中的自动参数类型导致 "Use 'template' keyword to treat..." 错误
Auto parameter type in lambda causes "Use 'template' keyword to treat..." error
我有这个代码
struct TestClass
{
template <typename T>
T get()
{
return 0;
}
};
void invoke(const std::function<void(const TestClass& c)>& func)
{
func(TestClass());
}
现在如果我像下面这样使用invoke
就没有问题了
invoke([](TestClass tc) {
tc.get<int>();
});
但是,如果我将 lambda 函数中的参数类型更改为 auto
,则会出现以下错误。我知道我可以通过在 get
之前插入 template
关键字来修复它,但我不明白的是为什么我会收到此错误?
error: use 'template' keyword to treat 'get' as a dependent template name
tc.get<int>();
^
template
// Happens when using `auto` as parameter type
invoke([](auto tc) {
tc.get<int>();
});
我正在使用 clang v10.0
现在你有一个模板类型(以 auto
的形式)而不是具体类型 TestClass
,get
函数是依赖的,因此你需要限定它带有 template
关键字:
tc.template get<int>();
我有这个代码
struct TestClass
{
template <typename T>
T get()
{
return 0;
}
};
void invoke(const std::function<void(const TestClass& c)>& func)
{
func(TestClass());
}
现在如果我像下面这样使用invoke
就没有问题了
invoke([](TestClass tc) {
tc.get<int>();
});
但是,如果我将 lambda 函数中的参数类型更改为 auto
,则会出现以下错误。我知道我可以通过在 get
之前插入 template
关键字来修复它,但我不明白的是为什么我会收到此错误?
error: use 'template' keyword to treat 'get' as a dependent template name
tc.get<int>();
^
template
// Happens when using `auto` as parameter type
invoke([](auto tc) {
tc.get<int>();
});
我正在使用 clang v10.0
现在你有一个模板类型(以 auto
的形式)而不是具体类型 TestClass
,get
函数是依赖的,因此你需要限定它带有 template
关键字:
tc.template get<int>();