#define SOL_ALL_SAFETIES_ON 1 #include #include void create_namespace_sf(sol::state& lua) { // this would explode // lua["sf"]["value"] = 256; lua[sol::create_if_nil]["sf"]["value"] = 256; } int main(int, char*[]) { std::cout << "=== sol::lua_value/sol::array_value ===" << std::endl; sol::state lua; lua.open_libraries(sol::lib::base); const auto& code = R"( print(sf) print(sf.value) assert(sf.value == 256) )"; auto result = lua.safe_script(code, sol::script_pass_on_error); // did not work SOL_ASSERT(!result.valid()); // create values create_namespace_sf(lua); auto result2 = lua.safe_script(code, sol::script_pass_on_error); // it worked properly SOL_ASSERT(result2.valid()); std::cout << std::endl; return 0; }