我想在C++ 17下的类模板扣除。
我写了一个示例类模板,可以在不指定模板类型的情况下构建。没有指定类型就无法构造std::unique_ptr
。
我需要帮助理解为什么是这种情况。C++ 17类模板扣除
使用铛5.0
// Please don't worry about memory leaks, etc. This is sample code anyways.
template<typename T, typename deleter = std::default_delete<T>>
struct Sample
{
T* x_;
deleter func_;
Sample(T* x = nullptr, deleter func = deleter{})
: x_(x)
, func_(func)
{
}
};
auto sample = Sample(new int(10));
std::cout << *(sample.x_) << '\n';
下面的代码无法编译代码编译。
auto ptr = std::unique_ptr(new int(10));
您是否愿意告诉我们错误信息是什么? –
Meta小贴士:当你想说“请忽略所有细节”时,尝试使用*来处理所有细节,看看问题是否仍然不清楚。很多事情都是关于细节的。 –
@KerrekSB如果它没有编译含义,那么编译器是否抱怨提供模板类型并不那么明显?有什么关心或不关心? – Jagannath