为什么Clang无法将模板模板参数的默认模板参数考虑在内?

时间:2018-03-08 10:37:22

标签: c++ templates

假设我们有以下课程模板:

template<typename T, template<typename> class Container>
class Widget {};

在C ++ 17之前,您无法将std:vector传递给Container,因为std::vector需要2个模板参数,而不是一个,即使第二个模板参数(分配器)具有默认值。所以以下内容无法编译:

Widget<int, std::vector> w; //ERROR in C++14

由于考虑了C ++ 17的默认模板参数,所以上面应该编译。但是,我在GCC 7.2.0和Clang 5.0.0中进行了测试,当它在GCC中工作时,它无法在Clang中编译,并显示以下消息:

prog.cc:10:22: error: template template argument has different template parameters than its corresponding template template parameter
Widget<int, std::vector> w;
                 ^
/opt/wandbox/clang-5.0.0/include/c++/v1/vector:446:1: note: too many template parameters in template template argument
template <class _Tp, class _Allocator /* = allocator<_Tp> */>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cc:5:22: note: previous template template parameter is here
template<typename T, template<typename> class Container>
                     ^~~~~~~~~~~~~~~~~~

知道为什么吗?

0 个答案:

没有答案