That explains how your C++ functions can't take non-const ref/pointers if you want to bind them to Lua. So, the out_value function policy will add a return value in Lua code, rather than modifying the input.
Where your C++ code would look like
char* str = "hi"; UCase(str); std::cout << str; //prints 'HI'
Your Lua code would look like
local str = "hi" local ucstr = UCase(str) --// or you can have str = UCase(str) print(ucstr) //prints 'HI'