bool is_stack(std::false_type) const { auto pp = stack::push_pop(*this); return stack::check<T>(lua_state(), -1, no_panic); }
decltype(auto) as_stack(std::false_type) const { base_t::push(); return stack::pop<T>(lua_state()); }
bool is_stack(std::true_type) const { return stack::check<T>(lua_state(), base_t::stack_index(), no_panic); }
decltype(auto) as_stack(std::true_type) const { return stack::get<T>(lua_state(), base_t::stack_index()); }