1

I know in case of if constexpr(bool_test) compiler will throw away else statement and it's body content or vice versa depending on if expression evaluates to true or false.

However if we have mutiple if else if do we need to specify constexpr for each of if statement or is one enough?

for example:

#include <type_traits>

class test { };

template <typename T>
struct is_test1 : public std::false_type { };

template <typename T>
struct is_test2 : public std::false_type { };

template <typename T>
struct is_test3 : public std::false_type { };

template<>
struct is_test3<test> : public std::true_type { };

int main()
{
    if constexpr(is_test1<test>::value)
    {

    }
    else if constexpr(is_test2<test>::value)
    {

    }
    else if constexpr(is_test3<test>::value)
    {

    }
    else
    {

    }
}

what happens if we declare if constexpr only for first if how does compiler handle other if's are they compile time expressions that is does compiler throw away the rest even if no constexpr is specified?

For example we could write this instead, but does compiler throw away all except one which evaluates to true:

int main()
{
    if constexpr (is_test1<test>::value)
    {

    }
    else if (is_test2<test>::value)
    {

    }
    else if (is_test3<test>::value)
    {

    }
    else
    {

    }
}
randomusername
  • 7,927
  • 23
  • 50
metablaster
  • 1,958
  • 12
  • 26

0 Answers0