Здравствуйте!
Вот такой код:
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асколько проще была бы жизнь, если бы она была в исходниках.
Здравствуйте 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 и для задания значения в перечислении использовано быть не может.