27#ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP
28#define SOL_SINGLE_INCLUDE_FORWARD_HPP
34#if (defined(__cplusplus) && __cplusplus == 201703L) || (defined(_MSC_VER) && _MSC_VER > 1900 && ((defined(_HAS_CXX17) && _HAS_CXX17 == 1) || (defined(_MSVC_LANG) && (_MSVC_LANG > 201402L))))
35#ifndef SOL_CXX17_FEATURES
36#define SOL_CXX17_FEATURES 1
40#if defined(SOL_CXX17_FEATURES) && SOL_CXX17_FEATURES
41#if defined(__cpp_noexcept_function_type) || ((defined(_MSC_VER) && _MSC_VER > 1911) && (defined(_MSVC_LANG) && ((_MSVC_LANG >= 201403L))))
42#ifndef SOL_NOEXCEPT_FUNCTION_TYPE
43#define SOL_NOEXCEPT_FUNCTION_TYPE 1
46#if defined(__clang__) && defined(__APPLE__)
47#if defined(__has_include)
48#if __has_include(<variant>)
49#define SOL_STD_VARIANT 1
53#define SOL_STD_VARIANT 1
60 #if defined(_DEBUG) && !defined(NDEBUG)
62 #ifndef SOL_IN_DEBUG_DETECTED
63 #define SOL_IN_DEBUG_DETECTED 1
69 #ifndef SOL_NO_EXCEPTIONS
70 #define SOL_NO_EXCEPTIONS 1
79#elif defined(__GNUC__) || defined(__clang__)
81 #if !defined(NDEBUG) && !defined(__OPTIMIZE__)
83 #ifndef SOL_IN_DEBUG_DETECTED
84 #define SOL_IN_DEBUG_DETECTED 1
90 #ifndef SOL_NO_EXCEPTIONS
91 #define SOL_NO_EXCEPTIONS 1
103#if defined(SOL_CHECK_ARGUMENTS) && SOL_CHECK_ARGUMENTS
107 #if !defined(SOL_SAFE_GETTER)
108 #define SOL_SAFE_GETTER 1
115 #if !defined(SOL_SAFE_USERTYPE)
116 #define SOL_SAFE_USERTYPE 1
122 #if !defined(SOL_SAFE_REFERENCES)
123 #define SOL_SAFE_REFERENCES 1
128 #if !defined(SOL_SAFE_FUNCTION)
129 #define SOL_SAFE_FUNCTION 1
137 #if !defined(SOL_SAFE_FUNCTION_CALLS)
138 #define SOL_SAFE_FUNCTION_CALLS 1
144 #if !defined(SOL_SAFE_PROXIES)
145 #define SOL_SAFE_PROXIES 1
151 #if !defined(SOL_SAFE_NUMERICS)
152 #define SOL_SAFE_NUMERICS 1
159 #if !defined(SOL_NO_CHECK_NUMBER_PRECISION)
161 #define SOL_NO_CHECK_NUMBER_PRECISION 0
166#if defined(SOL_IN_DEBUG_DETECTED) && SOL_IN_DEBUG_DETECTED
168 #if !defined(SOL_SAFE_REFERENCES)
170 #define SOL_SAFE_REFERENCES 1
177 #if !defined(SOL_SAFE_USERTYPE)
178 #define SOL_SAFE_USERTYPE 1
181 #if !defined(SOL_SAFE_FUNCTION_CALLS)
183 #define SOL_SAFE_FUNCTION_CALLS 1
188 #if !defined(SOL_PRINT_ERRORS)
189 #define SOL_PRINT_ERRORS 1
194#if !defined(SOL_PRINT_ERRORS)
195#define SOL_PRINT_ERRORS 0
198#if !defined(SOL_DEFAULT_PASS_ON_ERROR)
199#define SOL_DEFAULT_PASS_ON_ERROR 0
202#if !defined(SOL_ENABLE_INTEROP)
203#define SOL_ENABLE_INTEROP 0
206#if defined(__MAC_OS_X_VERSION_MAX_ALLOWED) || defined(__OBJC__) || defined(nil)
207#if !defined(SOL_NO_NIL)
212#if defined(SOL_USE_BOOST) && SOL_USE_BOOST
213#ifndef SOL_UNORDERED_MAP_COMPATIBLE_HASH
214#define SOL_UNORDERED_MAP_COMPATIBLE_HASH 1
218#ifndef SOL_STACK_STRING_OPTIMIZATION_SIZE
219#define SOL_STACK_STRING_OPTIMIZATION_SIZE 1024
236 class stack_reference;
238 struct proxy_base_tag;
239 template <
typename Super>
241 template <
typename Table,
typename Key>
244 template <
typename T>
246 template <
typename T>
248 template <
bool,
typename T>
256 template <
typename T>
258 typedef table_core<false> table;
259 typedef table_core<true> global_table;
260 typedef main_table_core<false> main_table;
261 typedef main_table_core<true> main_global_table;
262 typedef stack_table_core<false> stack_table;
263 typedef stack_table_core<true> stack_global_table;
264 template <
typename base_t>
269 template <
typename T,
bool>
271 template <
typename T,
bool,
typename H>
281 using protected_function = safe_function;
282 using main_protected_function = main_safe_function;
283 using stack_protected_function = stack_safe_function;
284 using stack_aligned_protected_function = stack_aligned_safe_function;
285#if defined(SOL_SAFE_FUNCTION) && SOL_SAFE_FUNCTION
286 using function = protected_function;
287 using main_function = main_protected_function;
288 using stack_function = stack_protected_function;
290 using function = unsafe_function;
291 using main_function = main_unsafe_function;
292 using stack_function = stack_unsafe_function;
294 using stack_aligned_function = stack_aligned_unsafe_function;
297 struct unsafe_function_result;
298 struct protected_function_result;
299 using safe_function_result = protected_function_result;
300#if defined(SOL_SAFE_FUNCTION) && SOL_SAFE_FUNCTION
301 using function_result = safe_function_result;
303 using function_result = unsafe_function_result;
306 template <
typename base_t>
308 template <
typename base_t>
310 template <
typename base_t>
312 template <
typename base_t>
314 template <
typename base_t>
332 struct stack_proxy_base;
334 struct variadic_args;
335 struct variadic_results;
338 struct this_main_state;
339 struct this_environment;
341 template <
typename T>
343 template <
typename T>
345 template <
typename T>
347 template <
typename T>
349 template <
typename T>
351 template <
typename T>
353 template <
typename T>
355 template <
typename F,
typename... Filters>
358 template <
typename T>
360 template <
typename T>