【发布时间】:2020-11-13 17:42:31
【问题描述】:
我有以下代码
#include <memory>
template <typename T>
class A {
};
template <typename T>
class B : public A<T> {};
template <typename T>
void Foo(std::shared_ptr<A<T>> arg){}
int main(){
auto bptr = std::make_shared<B<int>>();
std::shared_ptr<A<int>> aptr = bptr;
// This compiles
Foo(aptr);
// This does not compile
Foo(bptr);
// This compiles
Foo<int>(bptr);
}
我的问题是为什么编译器不能处理该行?
Foo(bptr);
【问题讨论】:
-
我会说调用模板函数会导致模板扣除作为第一笔业务。 gcc 报告模板推导失败,我猜想查看超类并尝试从超类中推导模板参数是不可能的。这不是一个可推断的上下文。
标签: c++ templates shared-ptr