如何通过 constexpr 表达式调用 returns void 的 constexpr 函数?

How to call a constexpr function which returns void by a constexpr expression?

调用 test 编译失败但 test1 成功

constexpr void test(int n)
{
    return;
}

constexpr int test1(int n)
{
    return n;
}


int main()
{
    constexpr test(5); // Failed
    constexpr (test)(5); // Also failed
    constexpr auto n = test1(5);  // OK
    return 0;
}

我可能误用了某些东西,或者这不是真实案例。请帮忙解释一下。我在 SO

上找不到相同的问题

输出:

<source>: In function 'int main()':
<source>:14:15: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
   14 |     constexpr test(5); // Failed
      |               ^~~~
<source>:15:16: error: ISO C++ forbids declaration of 'test' with no type [-fpermissive]
   15 |     constexpr (test)(5); // Also failed
      |                ^~~~

您使用了错误的语法。编译器感到困惑,因为它期望您要声明一个名为 test 的变量,并抱怨说您不能在不声明其类型的情况下这样做。这是编译器所期望的:

constexpr int test(5);     // OK
constexpr int (test_x)(5); // also OK

这就是您真正想要的:

test(5);
(test)(5);  // ok, but unusual to put the () here

您无需明确声明您正在调用 constexpr 方法。 constexpr 是声明的一部分,而不是函数调用的一部分。