The analyzer has detected a block of code where the 'std::optional::value()' method is used to access the contents of an 'std::optional' object that is known to have been initialized.
Consider the following contrived example:
inline void LuaBlockLoader::loadColorMultiplier( BlockState &state, const sol::table &table) const { std::optional<sol::table> colorMultiplier = table["color_multiplier"]; if (colorMultiplier != std::nullopt) { state.colorMultiplier(gk::Color{ colorMultiplier.value().get<u8>(1), colorMultiplier.value().get<u8>(2), colorMultiplier.value().get<u8>(3), colorMultiplier.value().get<u8>(4) }); } }
This method adds an overhead for checking the contents: if an object of class 'std::optional' is found to be equal to 'std::nullopt', an 'std::bad_optional_access' exception will be thrown. If the object is known to be already initialized, the code can be simplified and speeded up by using the overloaded operator 'std::optional::operator*' or 'std::optional::operator->':
inline void LuaBlockLoader::loadColorMultiplier( BlockState &state, const sol::table &table) const { std::optional<sol::table> colorMultiplier = table["color_multiplier"]; if (colorMultiplier != std::nullopt) { state.colorMultiplier(gk::Color{ colorMultiplier->get<u8>(1), colorMultiplier->get<u8>(2), colorMultiplier->get<u8>(3), colorMultiplier->get<u8>(4) }); } }