c ++可变参数模板和模板模板参数:错误:模板参数列表中参数1的类型/值不匹配

时间:2019-01-19 09:15:01

标签: c++ c++11 variadic-templates

我收到错误:编译以下代码时,模板参数列表中参数1的类型/值不匹配... 。编译器是gcc版本8.2.0。

template<typename>
struct t1 {};

template<typename ...>
struct t2 {};

template<typename, typename ...>
struct t3 {};

template<template<typename> class>
struct tt1 {};

template<template<typename ...> class>
struct tt2{};

template<template<typename, typename ...> class>
struct tt3{};


tt1<t2> _1; // error
tt1<t3> _2; // error
tt2<t1> _3;
tt2<t3> _4;
tt3<t1> _5;
tt3<t2> _6; // error

问题:为什么允许 _3 _4 _5 _1 _2 _6 错误?

1 个答案:

答案 0 :(得分:1)

这些错误是pre C ++ 17中的错误。在C ++ 17之前,模板模板参数/参数必须完全匹配。

但是由于在标准中添加了P0522R0,因此该规则不太严格,并且可以编译该代码。

到目前为止,我仅由GCC来实现,您需要指定标准:gcc -std=c++17 see here