考慮這個最小例如:可變參數模板和通過分配
template <typename T, typename U>
struct foo {};
template <template <typename...> class Bar>
struct converter
{
template <typename... Args>
converter(const Bar<Args...> &);
};
int main()
{
converter<foo> c(foo<int,double>()); // This works.
// converter<foo> c = foo<int,double>(); This fails
}
的註釋的線路發生故障時與兩個GCC 4.5和4.6,以這樣的消息:
main.cpp:10:2: error: wrong number of template arguments (1, should be 2)
main.cpp:4:8: error: provided for template<class T, class U> struct foo
main.cpp: In function int main():
main.cpp:15:37: error: conversion from foo<int, double> to non-scalar type converter<foo> requested
如果相反使用可變參數模板時,使用了特定數量的模板參數(即在這種情況下爲2),因此沒有錯誤。我有點困惑,因爲我預計這兩條線完全相同:這是一種預期的行爲嗎?
會變換器 C =變換器(FOO ());工作? –
Tomek
2011-01-20 16:58:10
沒有,正如Johannes指出的那樣,這是我的錯誤,暗示main()的第一行實際上初始化了任何東西。您的建議會產生與註釋行相同的錯誤。 – bluescarni 2011-01-20 18:12:57