Почему я должен предпочесть static constexpr int в классе над enum для интегральных констант на уровне класса?

Обновление C ++ 17: static constexpr переменные неявноinline поэтому нет необходимости во внешнем определении.

Оригинальный вопрос:

Допустим, у меня есть список констант, таких как

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

Это, конечно, говорит о том, что я добавляю определения для них, чтобы избежать проблем с использованием ODR, поэтому мне нужно:

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

Зачемдолжен Я предпочитаю это

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

Что избавляет меня от головной боли при использовании ODR сN а такжеM на самом деле это просто константы, а не объекты сами по себе (более крупная сделка, если это только заголовок) и короче. Я мог бы явно указать типenum : long long или что угодно, если нужно. В чем преимущество первого?

Ответы на вопрос(3)

Ваш ответ на вопрос