【发布时间】:2019-12-24 10:29:09
【问题描述】:
我发现使用常量引用参数调用 constexpr 静态方法会导致 clang 和 icc 的错误“表达式不是整数常量”,但对于 gcc 或 msvc (https://godbolt.org/z/PewOVc) 则不会:
struct S
{
static constexpr bool ok() { return true; }
};
constexpr void ff(const S &s) // OK for everyone if not a ref
{
static_assert(s.ok(), "oops!"); // ERROR clang/icc, OK gcc/msvc
static_assert(S::ok(), "oops!"); // OK for everyone
}
如果参数不是引用,则代码由这些编译器中的任何一个编译。谁是正确的/正确的?
【问题讨论】:
标签: c++ compiler-errors c++14 language-lawyer