force a type to be viewed as a container-type when serialized to Lua

template <typename T>
struct as_returns_t { ... };

template <typename T>
as_returns_t<T> as_returns( T&& );

Sometimes, you have a type whose metatable you claim with a usertype metatable via usertype semantics. But, it still has parts of it that make it behave like a container in C++: A value_type typedef, an iterator typedef, a begin, an end, and other things that satisfy the Container requirements or the Sequence Container requirements or behaves like a forward_list.

Whatever the case is, you need it to be returned to Lua and have many of the traits and functionality described in the containers documentation. Wrap a return type or a setter in sol::as_container( value ); to allow for a type to be treated like a container, regardless of whether sol::is_container triggers or not.

See this container example to see how it works.