class MyConstants
{
public :
static const long constant1 = 1; //всё ок
static const double constant2 = 2.2; //ругается при g++ -pedantic
};
Ругается так: «ISO C++ запрещает инициализацию элемента-константы ‘constant2’ нецелочисленного типа ‘const double’».
Смотрим в стандарт:
ANSI C++ 98, 9.2 «Class Members» item 4
A member-declarator can contain a constant-initializer only if it declares a static member (9.4) of const integral or const enumeration type, see 9.4.2.
ANSI C++ 98, 9.4.2 «Static Data Members» item 2
If a static data member is of const integral or const enumeration type, its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.
Объясните, пожалуйста, к чему в стандарте такое странное ограничение?