如果constexpr()与非const条件结合使用

时间:2019-04-03 09:45:06

标签: c++ visual-studio c++17

我正在尝试这样的事情:

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()吗?

希望您能提供帮助。我不想得到两个相同的案例。

1 个答案:

答案 0 :(得分:4)

由于Foo();分支有效(即编译),而与TEMPLATE_BOOL_VALUE是否为真无关,因此无需使用if constexpr

只需使用if (TEMPLATE_BOOL_VALUE || bOhterBoolValue)