constant expression
От: Sergeem Израиль  
Дата: 19.09.02 16:05
Оценка:
Здравствуйте!
Вот такой код:

const int a        = 1;
enum {aa = a}; // OK

const int b        = a;
enum {bb = b}; // OK

const int c        = 2*a + 1;
enum {cc = c}; // OK

const int x[1] = {1};
const int d        = x[0];
enum {dd = d}; // error C2057: expected constant expression


Это MSVC так "шутит", или так оно и должно быть по стандарту?

Serge.
Serge.

Hасколько проще была бы жизнь, если бы она была в исходниках.
Re: constant expression
От: Андрей Тарасевич Беларусь  
Дата: 19.09.02 16:45
Оценка: 23 (3)
Здравствуйте Sergeem, Вы писали:

S>Здравствуйте!

S>Вот такой код:
S>

S>const int a        = 1;
S>enum {aa = a}; // OK

S>const int b        = a;
S>enum {bb = b}; // OK

S>const int c        = 2*a + 1;
S>enum {cc = c}; // OK

S>const int x[1] = {1};
S>const int d        = x[0];
S>enum {dd = d}; // error C2057: expected constant expression

S>


S>Это MSVC так "шутит", или так оно и должно быть по стандарту?


Так оно и должно быть по стандарту. '1' — это integral constant expression (ICE), поэтому 'a' — тоже ICE. '2*a+1' — ICE, поэтому 'c' — тоже ICE. 'x[0]' — не ICE (в ICE не разрешается использование оператора '[]'), поэтому 'd' — не ICE и для задания значения в перечислении использовано быть не может.
Best regards,
Андрей Тарасевич
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.