在类“ static_assert”中使用的constexpr静态方法“不是整数常量表达式”

时间:2020-06-14 17:10:06

标签: c++11 language-lawyer constexpr

这是显示问题的最小示例:

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");

                  ^~~~~

它通过的类之外。

标准中可能有一些解释,但是我对基本原理更感兴趣吗? 由于其他静态断言正在起作用,因此不会接缝一致且合乎逻辑。

0 个答案:

没有答案
相关问题