Статическое утверждение для проверки статических элементов данных класса const?

У меня есть несколько классов с элементами данных "static const". Я хотел бы знать, как проверить их значения во время компиляции с помощью static_assert. Могу ли я поместить static_assert непосредственно в тело класса? (Размещать мой static_assert в каждом конструкторе не очень практично.)


person Vincent    schedule 16.06.2012    source источник


Ответы (1)


Да, static_assert() можно разместить везде, где может быть объявление. Это включает в себя тело класса:

class C {
public:
    enum E {
      A, B, C,
      NumEes
    };
    constexpr Foo foos[] = { {...}, {...}, {...} };
    static_assert( NumEes == sizeof foos / sizeof *foos, "size mismatch" );

    // ...
};
person Marc Mutz - mmutz    schedule 16.06.2012