3

I tried the following code snippet with MSVC 10, where it works fine.

enum
{
  FOO = (sizeof(void*) == 8 ? 10 : 20)
};

int main()
{
  return FOO;
}

What I would like to know is: Does the C++ Standard (preferably C++98) allow me to use the conditional-operator in a constant expression when all operands are constant expressions, or is this a Microsoft quirk/extension?

1 Answer 1

6

This is perfectly valid and sensible standard C++.

The ternary conditional operator forms an expression, and the expression is a constant expression if its operands are.

The standard reference is C++11 5.19/2:

A conditional-expression is a core constant expression [...]

Note that by 5.16, ternary conditional expressions are one type of conditional-expressions. Other types are things like 2 == 3.

Sign up to request clarification or add additional context in comments.

4 Comments

Could you explain to me how this is defined in the standard? Apparently e.g. (C99 6.6/6) describes integer constant expressions, but it doesn't say much about operators.
@mooware: I thought you're asking about C++? C is quite a bit different when it comes to constant expressions (at least C89). I'm happy to let someone else dig up a C reference.
Yes, I'm asking about C++, but that was the first reference I found here on SO. Sorry for the confusion, and thanks for your answer.
perfect answer to justify Maxim's answer in this post : stackoverflow.com/a/7039269/893406

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.