# sol2 3.5.0 documentation

## protect

### Search the Documentation

# protect

routine to mark a function / variable as requiring safety

    template <typename T>
    auto protect( T&& value );

`sol::protect( my_func )` allows you to protect a function call or member variable call when it is being set to Lua. It can be used with usertypes or when just setting a function into sol. Below is an example that demonstrates that a call that would normally not error without Safety features turned on that instead errors and makes the Lua safety-call wrapper `pcall` fail:

     1#define SOL_ALL_SAFETIES_ON 1
     2#include <sol/sol.hpp>
     3
     4
     5int main(int, char*[]) {
     6
     7	struct protect_me {
     8		int gen(int x) {
     9			return x;
    10		}
    11	};
    12
    13	sol::state lua;
    14	lua.open_libraries(sol::lib::base);
    15	lua.new_usertype<protect_me>(
    16	     "protect_me", "gen", sol::protect(&protect_me::gen));
    17
    18	lua.script(R"__(
    19	pm = protect_me.new()
    20	value = pcall(pm.gen,"wrong argument")
    21	)__");
    22	bool value = lua["value"];
    23	SOL_ASSERT(!value);
    24
    25	return 0;
    26}