gpt4 book ai didi

c++ - 带有 clang 的模板阴影错误

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

正如以下代码片段中的注释所说,这是 gcc 4.4 的解决方法。错误,我现在可能应该删除它。参见 Template template parameters and variadic templates with gcc 4.4对此的背景。

在任何情况下,这都会在带有 clang 3.4.2-4 的 Debian Wheezy 上出现错误,从不稳定版本向后移植。这适用于 gcc 4.9,也从 Debian Wheezy 上的不稳定版(和 4.7)向后移植。

// Workaround for gcc 4.4 bug. See https://stackoverflow.com/q/8514633/350713
template <typename S, typename T,
template <typename S, typename T, typename... Args> class C,
typename... Args>
struct maptype
{
typedef C<S, T, Args...> type;
};

int main(void){}

错误是

clang++ -o shadow.ocl -c -ftemplate-depth-100 -fno-strict-aliasing -fno-common -ansi -Wextra -Wall -Werror -Wno-unused-function -Wc++0x-compat -Wpointer-arith -Wcast-qual -Wcast-align -std=c++11 -mtune=native -msse3 -O3 shadow.cc
shadow.cc:3:23: error: declaration of 'S' shadows template parameter
template <typename S, typename T, typename... Args> class C,
^
shadow.cc:2:20: note: template parameter is declared here
template <typename S, typename T,
^
shadow.cc:3:35: error: declaration of 'T' shadows template parameter
template <typename S, typename T, typename... Args> class C,
^
shadow.cc:2:32: note: template parameter is declared here
template <typename S, typename T,
^
2 errors generated.

我至少在 SO 上看到了几个表面上相似的问题,即 Clang VS VC++:"error: declaration of 'T' shadows template parameter"C++ template that used to work in old gcc results in 'shadows template parameter' error in clang++但我不清楚它们是不同的问题还是相同的问题。

感谢澄清。我不经常编写 C++,并且已经有一段时间没有查看模板模板参数了。

最佳答案

模板参数C中的名称STArgs

template <typename S, typename T, typename... Args> class C

是多余的,并且与 maptype 中的 STArgs 具有相同的名称。名称相同的事实会在 clang 上产生影子错误。

所以你可以这样写

template <typename S,
typename T,
template <typename, typename, typename...> class C,
typename... Args>
struct maptype;

或给出不同的名称(出于文档目的,因为它们不能被使用)

template <typename S,
typename T,
template <typename S_Type, typename T_Type, typename... Args_Type> class C,
typename... Args>
struct maptype;

关于c++ - 带有 clang 的模板阴影错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527433/

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