Por que devo preferir constexpr estático int em uma classe ao invés de enum para constantes integrais no nível de classe?

Atualização do C ++ 17: static constexpr variáveis são implicitamenteinline então não há definição externa necessária.

Pergunta original:

Digamos que eu tenha uma lista de constantes como

struct Cls {
    static constexpr int N = 32;
    static constexpr int M = 64;
};

É claro que isso sugere que eu adicione definições para evitar problemas de uso de ODR que possam ocorrer, por isso preciso:

constexpr int Cls::N;
constexpr int Cls::M;

Por quêdevemos Eu prefiro isso

struct Cls {
    enum : int {
        N = 32,
        M = 64
    };
};

O que me salva das dores de cabeça por uso de ODR desdeN eM são mais constantes e não objetos por si só (um negócio maior, se for somente de cabeçalho) e é mais curto. Eu poderia especificar explicitamente o tipoenum : long long ou o que for necessário. Qual é a vantagem do primeiro?

questionAnswers(3)

yourAnswerToTheQuestion