c++ - 自动模板参数 : g++ 7. 3 vs clang++ 6.0 : Which compiler is correct?

标签 c++ g++ clang++ c++17

对于这个代码示例,两个编译器会产生不同的结果。 Clang 生成两种不同的类型。 G++ 对 fufi 使用相同的类型。 哪个符合标准?

#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

clang-6.0 输出:

-10 4294967286

最佳答案

gcc 在这里是错误的,这显然是两种不同的类型。

并确认 - 此错误已在 gcc 8.0.1 中修复

Sample code

关于c++ - 自动模板参数 : g++ 7. 3 vs clang++ 6.0 : Which compiler is correct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48594693/

相关文章:

c++ - 如何将某些东西 push_back 成 2D Vector

c++ - g++ 编译存在于另一个目录中的源文件

c++ - Clang++ 不理解 mac 终端中的 c++11

c++ - 未找到 openssl/ssl.h 但已使用 Homebrew 软件安装

c++ - 无法识别的基于范围的 for 循环?

c++ - 如何捕获临界区抛出的异常?

c++ - WMI 给我不完整的硬件信息 (PhysicalMemory)

c++ - 需要将 Glib::RefPtr<T> 转换或转换为 Gtk::Widget&

c++ - 为什么此方法会破坏 std::cout 与 Cygwin g++?

lldb Windows 错误与 clang 10