【发布时间】:2018-02-05 20:22:34
【问题描述】:
这段代码编译得很好:
template <typename T1>
struct Struct {
};
struct ConvertsToStruct {
operator Struct<int>() const;
};
template <typename T>
void NonVariadicFunc(Struct<T>);
int main() {
NonVariadicFunc<int>(ConvertsToStruct{});
return 0;
}
但是尝试通过使用可变参数模板使其更通用一点,但编译失败:
template <typename T1>
struct Struct {
};
struct ConvertsToStruct {
operator Struct<int>() const;
};
template <typename... T>
void VariadicFunc(Struct<T...>);
int main() {
VariadicFunc<int>(ConvertsToStruct{});
return 0;
}
怎么了?为什么我尝试显式指定VariadicFunc 的模板类型没有成功?
天箭链接 => https://godbolt.org/g/kq9d7L
【问题讨论】:
-
更奇怪的是,如果我获取函数的地址,那么它可以工作:
(+VariadicFunc<int>)(ConvertsToStruct{});
标签: c++ c++11 templates variadic-templates type-deduction