採取以下代碼片段:模板向後兼容4.7
struct whatever {};
template < template <typename, typename> class FOX, typename bat>
struct wulf {};
template <typename A, typename B, typename C = whatever>
struct box;
template <typename A, typename B>
struct box<A, B, whatever> {};
template <typename A, typename B, typename C>
struct box : wulf<box, C> {};
int main(void)
{
return 0;
}
下GCC 4.7.2編譯時,它編譯下GCC 4.1.2罰款,但產生以下錯誤:
main.cpp:14:25 error: type/value mismatch at argument 1 in template parameter list for 'template<template<class,class> class FOX, class bat> struct wulf'
main.cpp:14:25 error: expected a template of type 'template<class, class> FOX', got 'template<class A, class B, class C> struct box'
這是與我似乎能夠重現此錯誤,我不知道發生了什麼的最小的示例代碼片段。爲什麼代碼被拒絕,是否有正確的方法來完成這將在兩個編譯?
這段代碼不應該在gcc 4.1中編譯......'box'是一個帶有3個類型參數的模板,它不匹配'wulf'的第一個參數,它是一個具有2個參數的模板。模板模板參數通常很棘手。 –