这是显示问题的最小示例:
constexpr bool foo()
{
return true;
}
class Test
{
public:
constexpr static bool bar()
{
return true;
}
static_assert(foo(), "foo");
static_assert(bar(), "bar"); // this fails
};
static_assert(foo(), "foo");
static_assert(Test::bar(), "bar");
Live demo用于gcc clang和msvc。
仅注意类中的static_assert(bar(), "bar");
会因错误而失败:
<source>:15:19: error: static_assert expression is not an integral constant expression
static_assert(bar(), "bar");
^~~~~
它通过的类之外。
标准中可能有一些解释,但是我对基本原理更感兴趣吗? 由于其他静态断言正在起作用,因此不会接缝一致且合乎逻辑。