【发布时间】:2015-10-14 15:23:42
【问题描述】:
这编译和工作正常:
template<typename T, typename ... Args>
void func()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
func<Args...>();
}
int main()
{
func<int, char, float>();
return 0;
}
...这也可以编译并正常工作:
struct Object {}; // Some dummy object
template<typename T, typename ... Args>
void func(Object *a)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
func<Args...>(a);
}
int main()
{
Object *a = new Object;
func<int, char, float>(a);
return 0;
}
...但这不会编译,因为它无法解析 T:
struct Object {}; // Some dummy object
template<typename T, typename ... Args>
void func(Object *a, Object *b)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
func<Args...>(a, b);
}
int main()
{
Object *a = new Object;
Object *b = new Object;
func<int, char, float>(a, b);
return 0;
}
我在这里做错了什么?抱歉无法使用 Ideone,无法工作。
【问题讨论】:
-
这些示例都不能在 coliru 上编译:coliru.stacked-crooked.com/a/ea051afe36f710d1
-
奇怪...我同意你的观点,但我在我的 OS X 笔记本电脑上使用 Clang 3.7,它编译得很好。奇怪。
标签: c++ templates variadic-templates variadic type-deduction