c ++:部分模板专业化,逻辑或编译器错误?

时间:2014-11-03 16:11:51

标签: c++ templates gcc specialization

我有一个班级T和一些模板类D1, D2,...,我将其混合并用作D1<D2<...<Dn<T>>...>。我想构建一个模板类,它将参数作为一个混合类,并根据它所扣除的参数做一些事情。简单地假设只有一个模板类D。

template <class T, template <class> class D>
struct mix {
  using type = D<T>;
};

template <class X>
struct DoStuff;

// 1st version -- this does not compile...
template <class T, template <class> class D>
struct DoStuff< typename mix<T,D>::type > {
  using type = int;
};

// 2nd version -- this compiles
template <class T, template <class> class D>
struct DoStuff< D<T> > {
  using type = int;
};

int main() {
   return 0;
}

专业化的第一个版本导致以下编译错误(关于CygWin的GCC 4.8.3):

test.cpp:11:8: error: template parameters not used in partial specialization:
 struct DoStuff< typename mix<T,D>::type > {
        ^
test.cpp:11:8: error:         'T'
test.cpp:11:8: error:         'template<class> class D'

而第二个编译干净。我很困惑,因为第一版中使用的mix<T,D>::type正好是D<T>,在第二版中使用。

这是编译器错误还是我错过了什么?非常感谢提前!

0 个答案:

没有答案