【发布时间】:2017-04-07 01:18:08
【问题描述】:
我正在尝试在C++17中的类模板下推演。
我编写了一个示例类模板,无需指定模板类型即可构建。 std::unique_ptr 不能在不指定类型的情况下构造。
我需要帮助来理解为什么会这样。
使用 clang 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));
【问题讨论】:
-
您是否愿意告诉我们错误信息是什么?
-
元提示:当你想说“请忽略所有细节”时,尝试处理所有细节,看看问题是否仍然不清楚。很多事情都是关于细节的。
-
@KerrekSB 如果它没有编译意义,那么编译器抱怨提供模板类型不是很明显吗?有什么值得关心或不关心的?