自动模板参数:G++ 7.3 与 CLang++ 6.0:哪个编译器是正确的
auto template parameters: g++ 7.3 vs clang++ 6.0 : Which compiler is correct?
两个编译器为此代码示例生成不同的结果。Clang 生成两种不同的类型。G++ 对 fu
和 fi
使用相同的类型。哪一个符合标准?
#include <iostream>
template< auto IVAL>
struct foo {
decltype(IVAL) x = -IVAL;
};
int main()
{
foo<10u> fu;
foo<10> fi;
std::cout << fi.x << " " << fu.x << 'n';
return 0;
}
G++-7.3 输出:
叮4294967286 4294967286
叮当当-6.0 输出:
-10 4294967286
gcc 在这里是错误的,这显然是两种不同的类型。
并确认 - 此错误已在 gcc 8.0.1 中修复
示例代码
相关文章:
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 告诉c++编译器该参数没有别名
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 推断模板参数的编译器
- 有没有办法在从编译器获取参数时避免预处理器宏?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 模板模板参数和模板别名:编译器错误?
- 如果可推导类型上有替换,可变参数模板类型推导会使编译器崩溃
- 如何使用传递给编译器的相同参数在 cmake 中运行命令?
- 编译器是否强制根据模板参数计算表达式?
- C++自定义分配器大小参数作为模板参数会引发编译器错误
- 为什么编译器抱怨 std::thread 参数在转换为右值后必须是可调用的?
- 编译器在C++中调用另一个函数时,在参数中查找已删除的构造函数
- 编译器给出错误:format 指定类型 'float *',但参数的类型'double' [-Wformat]
- 编译器确定参数是给定还是省略
- 当作为参数传入时,是否可以由编译器指定模板类参数?
- 编译器如何处理<Type> <Type> 具有多参数的向量initializer_list
- 模板模板参数导致Clang下的编译器错误,而不是GCC
- 编译器是否C++具有相同模板参数集的每个模板类实例生成代码?