次のコード スニペットをご覧ください。
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'
これは、このエラーを再現できる最小のサンプル コード スニペットであり、何が起こっているのかわかりません。コードが拒否されるのはなぜですか? また、両方でコンパイルできる正しい方法はありますか?