使用BetterEnums初始化vector时触发MSVC警告C26483的问题
MSVC代码分析警告C26483:枚举类列表初始化vector时触发误报
我在用BetterEnums库实现枚举反射,这个库通过宏和模板把常规枚举封装成类。但运行MSVC内置代码分析时,所有用列表初始化该枚举类型std::vector的位置都会触发警告C26483:Value X超出变量allotemp.XX的边界(0,0),仅使用在数组边界内的常量表达式索引数组(bounds.2),列表里有多少项就会触发多少次警告。
触发警告的示例代码
BETTER_ENUM( MyEnum, int8_t, A, B, C ) std::vector<MyEnum> myList = { MyEnum::A, MyEnum::B };
简化复现代码
通过预处理简化后,以下类也能复现该问题:
class MyEnum { public: enum _enumerated : int8_t { A, B, C }; constexpr MyEnum( _enumerated value ) : _value( value ) {} int8_t _value; public: MyEnum() = default; }; std::vector<MyEnum> myList = { MyEnum::A, MyEnum::B };
开发环境
- Microsoft Visual Studio Community 2019
- 版本16.11.26
- 工具集v142
- 编译标准C++17
补充:只有在列表初始化vector时会出现这个警告,其他使用枚举的场景都正常。我知道这个工具存在部分误报,但这次不清楚警告里的索引操作发生在何处,想找到原因或解决办法。
内容的提问来源于stack exchange,提问作者Blabba
相关产品推荐
相关产品推荐

