gpt4 book ai didi

c++ - 模板向后兼容 gcc 4.7

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:54 24 4
gpt4 key购买 nike

采用以下代码片段:

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'

这是我似乎能够重现此错误的最小示例代码片段,但我不知道发生了什么。为什么代码被拒绝,是否有正确的方法可以在两者下编译?

最佳答案

您的 wulf 类模板接受一个带有两个类型参数的类模板作为其第一个模板模板参数。

在这里,您尝试提供一个类模板(box)作为相应的参数,该类模板采用三个 类型参数:

template <typename A, typename B, typename C>
struct box : wulf<box, C> {};
// ^^^

这是非法的。是否为 box 类模板的第三个类型参数指定了默认类型参数并不重要:模板参数的类型和数量必须完全匹配。

要解决此问题,请按如下方式更改 wulf 类模板的定义:

template < template <typename, typename, typename> class FOX, typename bat>
// ^^^^^^^^
struct wulf {};

这是一个live example显示您的代码使用上述修复进行编译。

关于c++ - 模板向后兼容 gcc 4.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17581006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com