【发布时间】:2020-06-13 00:51:25
【问题描述】:
当使用 godbolt.org 在线编译器编译以下示例程序时,Clang-9.0.0 和 MSVC v19.24 都在标记为 (1) 和 (2) 的行报告错误。错误消息表明表达式 (reinterpret_cast<uintptr_t>(&x), 1) 不会计算为常量。但确实如此,不是吗?
另一方面,GCC-9.2 编译此示例时没有错误。
#include <memory>
int x;
enum
{
Value = (reinterpret_cast<uintptr_t>(&x), 1) // (1)
};
template <int N>
struct Test
{
};
Test<(reinterpret_cast<uintptr_t>(&x), 1)> t; // (2)
问题是:(reinterpret_cast<uintptr_t>(&x), 1) 是否计算为常数?
【问题讨论】:
标签: c++ c++17 language-lawyer