2
使用GCC 4.7.3,我得到以下錯誤爲什麼這個可變參數模板專門化定義不能編譯?
prog.cpp: In function ‘int main()’: prog.cpp:27:63: error: ‘Erase >::Result’ has not been declared
template <typename... List>
struct TypeList
{
enum
{
Length = sizeof...(List)
};
};
template <typename ToErase, typename... List>
struct Erase;
template <typename ToErase>
struct Erase<ToErase, TypeList<>>
{
typedef TypeList<> Result;
};
template <typename ToErase, typename... Head, typename... Tail>
struct Erase<ToErase, TypeList<Head..., ToErase, Tail...>>
{
typedef TypeList<Head..., Tail...> Result;
};
int main()
{
static_assert(Erase<double, TypeList<int, double, char>>::Result::Length == 2,
"Did not erase double from TypeList<int, double, char>");
return 0;
}
我不明白爲什麼代碼不會編譯給我收到錯誤消息,因爲一個類似的情況下編譯乾淨:
是否有一個標準關於不能推斷元素在tw中o參數包,就像我想要做的第一塊代碼?