如果constexpr()与非const条件组合

问题描述 投票:2回答:1

我正在尝试这样的事情:

if( constexpr( TEMPLATE_BOOL_VALUE ) || bOhterBoolValue )
{
    Foo();
}
else
{
    Baa();
}

我通常使用预处理器宏来表示这样的if语句:

#define IF_COND    if( constexpr( TEMPLATE_BOOL_VALUE ) || bOhterBoolValue )

IF_COND
{
    Foo();
}
else
{
    Baa();
}

在Visual Studio 2017中,这有效(我应该但没有检查生成的代码,但编译器接受了这种语法)。

在Visual Studio 2019中,现在出现错误“C2760”,因为它只允许:

if constexpr( TEMPLATE_BOOL_VALUE )
{
    Foo();
}
else if( bOhterBoolValue )
{
    Foo();
}
else
{
    Baa();
}

没有键入两次Foo()会有另一种方法吗?

希望你能帮忙。我不想得到两个相同的案件。

c++ visual-studio c++17
1个回答
4
投票

由于Foo();分支是有效的(即编译),无论TEMPLATE_BOOL_VALUE是否为真,都不需要使用if constexpr

只需使用if (TEMPLATE_BOOL_VALUE || bOhterBoolValue)

© www.soinside.com 2019 - 2024. All rights reserved.