采取以下代码片段:
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.1.2 下编译良好,但在 gcc 4.7.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'
这是我似乎能够重现此错误的最小示例代码片段,但我不知道发生了什么。为什么代码被拒绝,是否有正确的方法可以在两者下编译?