MSVC のバグ?
MSVC で定義できる enum 型 T は sizeof(T) == 4
までのようです。(Visual Studio 2019 16.3.1 で確認)
#include <iostream>
#include <limits>
enum T {
A = std::numeric_limits<unsigned long long>::max(),
};
int main(int argc, char** argv) {
std::cout << "A: " << A << '\n';
std::cout << "sizeof(T): " << sizeof(T) << '\n';
}
実行結果
A: -1
sizeof(T): 4
もちろん、g++ と clang は期待通りの結果 sizeof(T) == 8
になります。