C++ 模板化类无法从std::shared\u ptr<;隐式强制转换;T<;N>&燃气轮机;至标准::共享\u ptr<;常数T<;N>&燃气轮机;

C++ 模板化类无法从std::shared\u ptr<;隐式强制转换;T<;N>&燃气轮机;至标准::共享\u ptr<;常数T<;N>&燃气轮机;,c++,templates,c++11,c++14,C++,Templates,C++11,C++14,失败代码如下: #include <memory> template<size_t N> class A {}; template<size_t N> int testFct(std::shared_ptr<const A<N>> aptr) { return 1; } int main() { auto APtr = std::make_shared<A<2>>(); testFct(AP

失败代码如下:

#include <memory>

template<size_t N>
class A
{};

template<size_t N>
int testFct(std::shared_ptr<const A<N>> aptr) { return 1; }

int main() {
    auto APtr = std::make_shared<A<2>>();
    testFct(APtr);
}

允许代码进行编译(并假定在没有问题的情况下运行)。

FWIW,使用
testFct(APtr)适合我。我使用的是g++4.9.3。函数模板要求参数类型完全匹配。@n.m.或者使用SFINAE具有基/派生关系(因此出现错误消息)可能会有帮助:。
template<size_t N>
int testFct(std::shared_ptr<A<N>> aptr) { 
    return testFct(static_cast<std::shared_ptr<const A<N>>>(aptr)); 
}