void foo (int x)
{
struct A { static const int d = 0; }; // error
}
Помимо ссылки со стандарта, есть ли какая-либо мотивация для этого, чтобы запретить поле static
внутри внутреннего класса?
error: field `foo(int)::A::d' in local class cannot be static
Изменить. Тем не менее, функции-члены static
разрешены. У меня есть один случай использования для такого сценария. Предположим, что я хочу, чтобы foo()
вызывался только для POD, тогда я могу реализовать его как,
template<typename T>
void foo (T x)
{
struct A { static const T d = 0; }; // many compilers allow double, float etc.
}
foo()
должен проходить только для POD (если static
разрешено), а не для других типов данных. Это всего лишь один случай, который приходит мне на ум.