【发布时间】:2017-03-09 22:39:00
【问题描述】:
我有这个代码:
struct Base {};
template<typename T>
struct Foo : Base {};
struct Bar {
template<typename T> // v--- What's happening here?
Bar(T foo) : baz{std::make_unique<Foo>(foo)} {}
std::unique_ptr<Base> baz;
};
令人惊讶的是,GCC 和 Clang 接受并编译它。好像推导出了Foo的模板参数,但是没有意义。即使没有采用模板模板参数的std::make_unique 重载,编译器怎么会接受呢? Live example
【问题讨论】:
-
Err... 尝试使用该构造函数创建一个
Bar对象,如果可以的话。然后告诉我们编译器是否接受代码。 -
@WhiZTiM 它拒绝代码。我仍然觉得这两个编译器都没有抱怨模板参数类型不匹配真的很奇怪。