【发布时间】:2013-07-10 21:14:28
【问题描述】:
取如下代码sn-p:
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'
这是最小的示例代码 sn-p,我似乎能够重现此错误,但我不知道发生了什么。为什么代码被拒绝,是否有正确的方法可以在两者下编译?
【问题讨论】:
-
无论如何,该代码不应该在 gcc 4.1 中编译...
box是一个具有 3 个类型参数的模板,它与wulf的第一个参数不匹配,该模板恰好是 2论据。模板模板参数通常很棘手。
标签: c++ templates c++11 gcc4 gcc4.7