Skip to content

Instantly share code, notes, and snippets.

@devsnek
Created September 7, 2024 20:39
Show Gist options
  • Select an option

  • Save devsnek/e6ec5ab485845593ac2945ad89970ab4 to your computer and use it in GitHub Desktop.

Select an option

Save devsnek/e6ec5ab485845593ac2945ad89970ab4 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
# 1 "/home/snek/code/yuzu/src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 469 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "/home/snek/code/yuzu/build/src/core/CMakeFiles/core.dir/cmake_pch.hxx.cxx" 1
# 2 "<built-in>" 2
# 1 "/home/snek/code/yuzu/build/src/core/CMakeFiles/core.dir/cmake_pch.hxx" 1
# 4 "/home/snek/code/yuzu/build/src/core/CMakeFiles/core.dir/cmake_pch.hxx" 3
# 1 "/home/snek/code/yuzu/src/core/precompiled_headers.h" 1 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 1 3
# 14 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 1 3
# 30 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/user.hpp" 1 3
# 31 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/select_compiler_config.hpp" 1 3
# 36 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/compiler/clang.hpp" 1 3
# 366 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/compiler/clang.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/compiler/clang_version.hpp" 1 3
# 367 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/compiler/clang.hpp" 2 3
# 40 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp" 1 3
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/version" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/version" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
# 308 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
namespace std
{
typedef long unsigned int size_t;
typedef long int ptrdiff_t;
typedef decltype(nullptr) nullptr_t;
#pragma GCC visibility push(default)
extern "C++" __attribute__ ((__noreturn__, __always_inline__))
inline void __terminate() noexcept
{
void terminate() noexcept __attribute__ ((__noreturn__,__cold__));
terminate();
}
#pragma GCC visibility pop
}
# 341 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
namespace std
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
# 534 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
namespace std
{
#pragma GCC visibility push(default)
__attribute__((__always_inline__))
constexpr inline bool
__is_constant_evaluated() noexcept
{
return __builtin_is_constant_evaluated();
}
#pragma GCC visibility pop
}
# 573 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
namespace std
{
#pragma GCC visibility push(default)
extern "C++" __attribute__ ((__noreturn__))
void
__glibcxx_assert_fail
(const char* __file, int __line, const char* __function,
const char* __condition)
noexcept;
#pragma GCC visibility pop
}
# 601 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
namespace std
{
__attribute__((__always_inline__,__visibility__("default")))
inline void
__glibcxx_assert_fail()
{ }
}
# 680 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h" 1 3
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h" 3
# 1 "/usr/include/features.h" 1 3 4
# 402 "/usr/include/features.h" 3 4
# 1 "/usr/include/features-time64.h" 1 3 4
# 20 "/usr/include/features-time64.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 21 "/usr/include/features-time64.h" 2 3 4
# 1 "/usr/include/bits/timesize.h" 1 3 4
# 19 "/usr/include/bits/timesize.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 20 "/usr/include/bits/timesize.h" 2 3 4
# 22 "/usr/include/features-time64.h" 2 3 4
# 403 "/usr/include/features.h" 2 3 4
# 489 "/usr/include/features.h" 3 4
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 490 "/usr/include/features.h" 2 3 4
# 511 "/usr/include/features.h" 3 4
# 1 "/usr/include/sys/cdefs.h" 1 3 4
# 730 "/usr/include/sys/cdefs.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 731 "/usr/include/sys/cdefs.h" 2 3 4
# 1 "/usr/include/bits/long-double.h" 1 3 4
# 732 "/usr/include/sys/cdefs.h" 2 3 4
# 512 "/usr/include/features.h" 2 3 4
# 535 "/usr/include/features.h" 3 4
# 1 "/usr/include/gnu/stubs.h" 1 3 4
# 10 "/usr/include/gnu/stubs.h" 3 4
# 1 "/usr/include/gnu/stubs-64.h" 1 3 4
# 11 "/usr/include/gnu/stubs.h" 2 3 4
# 536 "/usr/include/features.h" 2 3 4
# 40 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/os_defines.h" 2 3
# 681 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/cpu_defines.h" 1 3
# 684 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 2 3
# 887 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/pstl/pstl_config.h" 1 3
# 888 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/x86_64-pc-linux-gnu/bits/c++config.h" 2 3
# 50 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 2 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/version" 2 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/select_stdlib_config.hpp" 2 3
# 45 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp" 1 3
# 78 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp" 3
# 1 "/usr/include/unistd.h" 1 3 4
# 27 "/usr/include/unistd.h" 3 4
extern "C" {
# 202 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/bits/posix_opt.h" 1 3 4
# 203 "/usr/include/unistd.h" 2 3 4
# 1 "/usr/include/bits/environments.h" 1 3 4
# 22 "/usr/include/bits/environments.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 23 "/usr/include/bits/environments.h" 2 3 4
# 207 "/usr/include/unistd.h" 2 3 4
# 217 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/bits/types.h" 1 3 4
# 27 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 28 "/usr/include/bits/types.h" 2 3 4
# 1 "/usr/include/bits/timesize.h" 1 3 4
# 19 "/usr/include/bits/timesize.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 20 "/usr/include/bits/timesize.h" 2 3 4
# 29 "/usr/include/bits/types.h" 2 3 4
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;
typedef long int __quad_t;
typedef unsigned long int __u_quad_t;
typedef long int __intmax_t;
typedef unsigned long int __uintmax_t;
# 141 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 142 "/usr/include/bits/types.h" 2 3 4
# 1 "/usr/include/bits/time64.h" 1 3 4
# 143 "/usr/include/bits/types.h" 2 3 4
typedef unsigned long int __dev_t;
typedef unsigned int __uid_t;
typedef unsigned int __gid_t;
typedef unsigned long int __ino_t;
typedef unsigned long int __ino64_t;
typedef unsigned int __mode_t;
typedef unsigned long int __nlink_t;
typedef long int __off_t;
typedef long int __off64_t;
typedef int __pid_t;
typedef struct { int __val[2]; } __fsid_t;
typedef long int __clock_t;
typedef unsigned long int __rlim_t;
typedef unsigned long int __rlim64_t;
typedef unsigned int __id_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __suseconds64_t;
typedef int __daddr_t;
typedef int __key_t;
typedef int __clockid_t;
typedef void * __timer_t;
typedef long int __blksize_t;
typedef long int __blkcnt_t;
typedef long int __blkcnt64_t;
typedef unsigned long int __fsblkcnt_t;
typedef unsigned long int __fsblkcnt64_t;
typedef unsigned long int __fsfilcnt_t;
typedef unsigned long int __fsfilcnt64_t;
typedef long int __fsword_t;
typedef long int __ssize_t;
typedef long int __syscall_slong_t;
typedef unsigned long int __syscall_ulong_t;
typedef __off64_t __loff_t;
typedef char *__caddr_t;
typedef long int __intptr_t;
typedef unsigned int __socklen_t;
typedef int __sig_atomic_t;
# 218 "/usr/include/unistd.h" 2 3 4
typedef __ssize_t ssize_t;
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3 4
# 77 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3 4
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3 4
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 92 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_null.h" 1 3 4
# 93 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 227 "/usr/include/unistd.h" 2 3 4
typedef __gid_t gid_t;
typedef __uid_t uid_t;
typedef __off64_t off_t;
typedef __off64_t off64_t;
typedef __useconds_t useconds_t;
typedef __pid_t pid_t;
typedef __intptr_t intptr_t;
typedef __socklen_t socklen_t;
# 287 "/usr/include/unistd.h" 3 4
extern int access (const char *__name, int __type) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int euidaccess (const char *__name, int __type)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int eaccess (const char *__name, int __type)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int execveat (int __fd, const char *__path, char *const __argv[],
char *const __envp[], int __flags)
noexcept (true) __attribute__ ((__nonnull__ (2, 3)));
extern int faccessat (int __fd, const char *__file, int __type, int __flag)
noexcept (true) __attribute__ ((__nonnull__ (2))) ;
# 342 "/usr/include/unistd.h" 3 4
extern __off64_t lseek (int __fd, __off64_t __offset, int __whence) noexcept (true) __asm__ ("" "lseek64");
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence)
noexcept (true);
extern int close (int __fd);
extern void closefrom (int __lowfd) noexcept (true);
extern ssize_t read (int __fd, void *__buf, size_t __nbytes)
;
extern ssize_t write (int __fd, const void *__buf, size_t __n)
;
# 404 "/usr/include/unistd.h" 3 4
extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pread64")
;
extern ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, __off64_t __offset) __asm__ ("" "pwrite64")
;
# 422 "/usr/include/unistd.h" 3 4
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
__off64_t __offset)
;
extern ssize_t pwrite64 (int __fd, const void *__buf, size_t __n,
__off64_t __offset)
;
extern int pipe (int __pipedes[2]) noexcept (true) ;
extern int pipe2 (int __pipedes[2], int __flags) noexcept (true) ;
# 452 "/usr/include/unistd.h" 3 4
extern unsigned int alarm (unsigned int __seconds) noexcept (true);
# 464 "/usr/include/unistd.h" 3 4
extern unsigned int sleep (unsigned int __seconds);
extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
noexcept (true);
extern int usleep (__useconds_t __useconds);
# 489 "/usr/include/unistd.h" 3 4
extern int pause (void);
extern int chown (const char *__file, __uid_t __owner, __gid_t __group)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int fchown (int __fd, __uid_t __owner, __gid_t __group) noexcept (true) ;
extern int lchown (const char *__file, __uid_t __owner, __gid_t __group)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int fchownat (int __fd, const char *__file, __uid_t __owner,
__gid_t __group, int __flag)
noexcept (true) __attribute__ ((__nonnull__ (2))) ;
extern int chdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int fchdir (int __fd) noexcept (true) ;
# 531 "/usr/include/unistd.h" 3 4
extern char *getcwd (char *__buf, size_t __size) noexcept (true) ;
extern char *get_current_dir_name (void) noexcept (true);
extern char *getwd (char *__buf)
noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__))
;
extern int dup (int __fd) noexcept (true) ;
extern int dup2 (int __fd, int __fd2) noexcept (true);
extern int dup3 (int __fd, int __fd2, int __flags) noexcept (true);
extern char **__environ;
extern char **environ;
extern int execve (const char *__path, char *const __argv[],
char *const __envp[]) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int fexecve (int __fd, char *const __argv[], char *const __envp[])
noexcept (true) __attribute__ ((__nonnull__ (2)));
extern int execv (const char *__path, char *const __argv[])
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int execle (const char *__path, const char *__arg, ...)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int execl (const char *__path, const char *__arg, ...)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int execvp (const char *__file, char *const __argv[])
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int execlp (const char *__file, const char *__arg, ...)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int execvpe (const char *__file, char *const __argv[],
char *const __envp[])
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int nice (int __inc) noexcept (true) ;
extern void _exit (int __status) __attribute__ ((__noreturn__));
# 1 "/usr/include/bits/confname.h" 1 3 4
# 24 "/usr/include/bits/confname.h" 3 4
enum
{
_PC_LINK_MAX,
_PC_MAX_CANON,
_PC_MAX_INPUT,
_PC_NAME_MAX,
_PC_PATH_MAX,
_PC_PIPE_BUF,
_PC_CHOWN_RESTRICTED,
_PC_NO_TRUNC,
_PC_VDISABLE,
_PC_SYNC_IO,
_PC_ASYNC_IO,
_PC_PRIO_IO,
_PC_SOCK_MAXBUF,
_PC_FILESIZEBITS,
_PC_REC_INCR_XFER_SIZE,
_PC_REC_MAX_XFER_SIZE,
_PC_REC_MIN_XFER_SIZE,
_PC_REC_XFER_ALIGN,
_PC_ALLOC_SIZE_MIN,
_PC_SYMLINK_MAX,
_PC_2_SYMLINKS
};
enum
{
_SC_ARG_MAX,
_SC_CHILD_MAX,
_SC_CLK_TCK,
_SC_NGROUPS_MAX,
_SC_OPEN_MAX,
_SC_STREAM_MAX,
_SC_TZNAME_MAX,
_SC_JOB_CONTROL,
_SC_SAVED_IDS,
_SC_REALTIME_SIGNALS,
_SC_PRIORITY_SCHEDULING,
_SC_TIMERS,
_SC_ASYNCHRONOUS_IO,
_SC_PRIORITIZED_IO,
_SC_SYNCHRONIZED_IO,
_SC_FSYNC,
_SC_MAPPED_FILES,
_SC_MEMLOCK,
_SC_MEMLOCK_RANGE,
_SC_MEMORY_PROTECTION,
_SC_MESSAGE_PASSING,
_SC_SEMAPHORES,
_SC_SHARED_MEMORY_OBJECTS,
_SC_AIO_LISTIO_MAX,
_SC_AIO_MAX,
_SC_AIO_PRIO_DELTA_MAX,
_SC_DELAYTIMER_MAX,
_SC_MQ_OPEN_MAX,
_SC_MQ_PRIO_MAX,
_SC_VERSION,
_SC_PAGESIZE,
_SC_RTSIG_MAX,
_SC_SEM_NSEMS_MAX,
_SC_SEM_VALUE_MAX,
_SC_SIGQUEUE_MAX,
_SC_TIMER_MAX,
_SC_BC_BASE_MAX,
_SC_BC_DIM_MAX,
_SC_BC_SCALE_MAX,
_SC_BC_STRING_MAX,
_SC_COLL_WEIGHTS_MAX,
_SC_EQUIV_CLASS_MAX,
_SC_EXPR_NEST_MAX,
_SC_LINE_MAX,
_SC_RE_DUP_MAX,
_SC_CHARCLASS_NAME_MAX,
_SC_2_VERSION,
_SC_2_C_BIND,
_SC_2_C_DEV,
_SC_2_FORT_DEV,
_SC_2_FORT_RUN,
_SC_2_SW_DEV,
_SC_2_LOCALEDEF,
_SC_PII,
_SC_PII_XTI,
_SC_PII_SOCKET,
_SC_PII_INTERNET,
_SC_PII_OSI,
_SC_POLL,
_SC_SELECT,
_SC_UIO_MAXIOV,
_SC_IOV_MAX = _SC_UIO_MAXIOV,
_SC_PII_INTERNET_STREAM,
_SC_PII_INTERNET_DGRAM,
_SC_PII_OSI_COTS,
_SC_PII_OSI_CLTS,
_SC_PII_OSI_M,
_SC_T_IOV_MAX,
_SC_THREADS,
_SC_THREAD_SAFE_FUNCTIONS,
_SC_GETGR_R_SIZE_MAX,
_SC_GETPW_R_SIZE_MAX,
_SC_LOGIN_NAME_MAX,
_SC_TTY_NAME_MAX,
_SC_THREAD_DESTRUCTOR_ITERATIONS,
_SC_THREAD_KEYS_MAX,
_SC_THREAD_STACK_MIN,
_SC_THREAD_THREADS_MAX,
_SC_THREAD_ATTR_STACKADDR,
_SC_THREAD_ATTR_STACKSIZE,
_SC_THREAD_PRIORITY_SCHEDULING,
_SC_THREAD_PRIO_INHERIT,
_SC_THREAD_PRIO_PROTECT,
_SC_THREAD_PROCESS_SHARED,
_SC_NPROCESSORS_CONF,
_SC_NPROCESSORS_ONLN,
_SC_PHYS_PAGES,
_SC_AVPHYS_PAGES,
_SC_ATEXIT_MAX,
_SC_PASS_MAX,
_SC_XOPEN_VERSION,
_SC_XOPEN_XCU_VERSION,
_SC_XOPEN_UNIX,
_SC_XOPEN_CRYPT,
_SC_XOPEN_ENH_I18N,
_SC_XOPEN_SHM,
_SC_2_CHAR_TERM,
_SC_2_C_VERSION,
_SC_2_UPE,
_SC_XOPEN_XPG2,
_SC_XOPEN_XPG3,
_SC_XOPEN_XPG4,
_SC_CHAR_BIT,
_SC_CHAR_MAX,
_SC_CHAR_MIN,
_SC_INT_MAX,
_SC_INT_MIN,
_SC_LONG_BIT,
_SC_WORD_BIT,
_SC_MB_LEN_MAX,
_SC_NZERO,
_SC_SSIZE_MAX,
_SC_SCHAR_MAX,
_SC_SCHAR_MIN,
_SC_SHRT_MAX,
_SC_SHRT_MIN,
_SC_UCHAR_MAX,
_SC_UINT_MAX,
_SC_ULONG_MAX,
_SC_USHRT_MAX,
_SC_NL_ARGMAX,
_SC_NL_LANGMAX,
_SC_NL_MSGMAX,
_SC_NL_NMAX,
_SC_NL_SETMAX,
_SC_NL_TEXTMAX,
_SC_XBS5_ILP32_OFF32,
_SC_XBS5_ILP32_OFFBIG,
_SC_XBS5_LP64_OFF64,
_SC_XBS5_LPBIG_OFFBIG,
_SC_XOPEN_LEGACY,
_SC_XOPEN_REALTIME,
_SC_XOPEN_REALTIME_THREADS,
_SC_ADVISORY_INFO,
_SC_BARRIERS,
_SC_BASE,
_SC_C_LANG_SUPPORT,
_SC_C_LANG_SUPPORT_R,
_SC_CLOCK_SELECTION,
_SC_CPUTIME,
_SC_THREAD_CPUTIME,
_SC_DEVICE_IO,
_SC_DEVICE_SPECIFIC,
_SC_DEVICE_SPECIFIC_R,
_SC_FD_MGMT,
_SC_FIFO,
_SC_PIPE,
_SC_FILE_ATTRIBUTES,
_SC_FILE_LOCKING,
_SC_FILE_SYSTEM,
_SC_MONOTONIC_CLOCK,
_SC_MULTI_PROCESS,
_SC_SINGLE_PROCESS,
_SC_NETWORKING,
_SC_READER_WRITER_LOCKS,
_SC_SPIN_LOCKS,
_SC_REGEXP,
_SC_REGEX_VERSION,
_SC_SHELL,
_SC_SIGNALS,
_SC_SPAWN,
_SC_SPORADIC_SERVER,
_SC_THREAD_SPORADIC_SERVER,
_SC_SYSTEM_DATABASE,
_SC_SYSTEM_DATABASE_R,
_SC_TIMEOUTS,
_SC_TYPED_MEMORY_OBJECTS,
_SC_USER_GROUPS,
_SC_USER_GROUPS_R,
_SC_2_PBS,
_SC_2_PBS_ACCOUNTING,
_SC_2_PBS_LOCATE,
_SC_2_PBS_MESSAGE,
_SC_2_PBS_TRACK,
_SC_SYMLOOP_MAX,
_SC_STREAMS,
_SC_2_PBS_CHECKPOINT,
_SC_V6_ILP32_OFF32,
_SC_V6_ILP32_OFFBIG,
_SC_V6_LP64_OFF64,
_SC_V6_LPBIG_OFFBIG,
_SC_HOST_NAME_MAX,
_SC_TRACE,
_SC_TRACE_EVENT_FILTER,
_SC_TRACE_INHERIT,
_SC_TRACE_LOG,
_SC_LEVEL1_ICACHE_SIZE,
_SC_LEVEL1_ICACHE_ASSOC,
_SC_LEVEL1_ICACHE_LINESIZE,
_SC_LEVEL1_DCACHE_SIZE,
_SC_LEVEL1_DCACHE_ASSOC,
_SC_LEVEL1_DCACHE_LINESIZE,
_SC_LEVEL2_CACHE_SIZE,
_SC_LEVEL2_CACHE_ASSOC,
_SC_LEVEL2_CACHE_LINESIZE,
_SC_LEVEL3_CACHE_SIZE,
_SC_LEVEL3_CACHE_ASSOC,
_SC_LEVEL3_CACHE_LINESIZE,
_SC_LEVEL4_CACHE_SIZE,
_SC_LEVEL4_CACHE_ASSOC,
_SC_LEVEL4_CACHE_LINESIZE,
_SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50,
_SC_RAW_SOCKETS,
_SC_V7_ILP32_OFF32,
_SC_V7_ILP32_OFFBIG,
_SC_V7_LP64_OFF64,
_SC_V7_LPBIG_OFFBIG,
_SC_SS_REPL_MAX,
_SC_TRACE_EVENT_NAME_MAX,
_SC_TRACE_NAME_MAX,
_SC_TRACE_SYS_MAX,
_SC_TRACE_USER_EVENT_MAX,
_SC_XOPEN_STREAMS,
_SC_THREAD_ROBUST_PRIO_INHERIT,
_SC_THREAD_ROBUST_PRIO_PROTECT,
_SC_MINSIGSTKSZ,
_SC_SIGSTKSZ
};
enum
{
_CS_PATH,
_CS_V6_WIDTH_RESTRICTED_ENVS,
_CS_GNU_LIBC_VERSION,
_CS_GNU_LIBPTHREAD_VERSION,
_CS_V5_WIDTH_RESTRICTED_ENVS,
_CS_V7_WIDTH_RESTRICTED_ENVS,
_CS_LFS_CFLAGS = 1000,
_CS_LFS_LDFLAGS,
_CS_LFS_LIBS,
_CS_LFS_LINTFLAGS,
_CS_LFS64_CFLAGS,
_CS_LFS64_LDFLAGS,
_CS_LFS64_LIBS,
_CS_LFS64_LINTFLAGS,
_CS_XBS5_ILP32_OFF32_CFLAGS = 1100,
_CS_XBS5_ILP32_OFF32_LDFLAGS,
_CS_XBS5_ILP32_OFF32_LIBS,
_CS_XBS5_ILP32_OFF32_LINTFLAGS,
_CS_XBS5_ILP32_OFFBIG_CFLAGS,
_CS_XBS5_ILP32_OFFBIG_LDFLAGS,
_CS_XBS5_ILP32_OFFBIG_LIBS,
_CS_XBS5_ILP32_OFFBIG_LINTFLAGS,
_CS_XBS5_LP64_OFF64_CFLAGS,
_CS_XBS5_LP64_OFF64_LDFLAGS,
_CS_XBS5_LP64_OFF64_LIBS,
_CS_XBS5_LP64_OFF64_LINTFLAGS,
_CS_XBS5_LPBIG_OFFBIG_CFLAGS,
_CS_XBS5_LPBIG_OFFBIG_LDFLAGS,
_CS_XBS5_LPBIG_OFFBIG_LIBS,
_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,
_CS_POSIX_V6_ILP32_OFF32_CFLAGS,
_CS_POSIX_V6_ILP32_OFF32_LDFLAGS,
_CS_POSIX_V6_ILP32_OFF32_LIBS,
_CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,
_CS_POSIX_V6_ILP32_OFFBIG_LIBS,
_CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,
_CS_POSIX_V6_LP64_OFF64_CFLAGS,
_CS_POSIX_V6_LP64_OFF64_LDFLAGS,
_CS_POSIX_V6_LP64_OFF64_LIBS,
_CS_POSIX_V6_LP64_OFF64_LINTFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,
_CS_POSIX_V6_LPBIG_OFFBIG_LIBS,
_CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,
_CS_POSIX_V7_ILP32_OFF32_CFLAGS,
_CS_POSIX_V7_ILP32_OFF32_LDFLAGS,
_CS_POSIX_V7_ILP32_OFF32_LIBS,
_CS_POSIX_V7_ILP32_OFF32_LINTFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_CFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS,
_CS_POSIX_V7_ILP32_OFFBIG_LIBS,
_CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS,
_CS_POSIX_V7_LP64_OFF64_CFLAGS,
_CS_POSIX_V7_LP64_OFF64_LDFLAGS,
_CS_POSIX_V7_LP64_OFF64_LIBS,
_CS_POSIX_V7_LP64_OFF64_LINTFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS,
_CS_POSIX_V7_LPBIG_OFFBIG_LIBS,
_CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS,
_CS_V6_ENV,
_CS_V7_ENV
};
# 631 "/usr/include/unistd.h" 2 3 4
extern long int pathconf (const char *__path, int __name)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern long int fpathconf (int __fd, int __name) noexcept (true);
extern long int sysconf (int __name) noexcept (true);
extern size_t confstr (int __name, char *__buf, size_t __len) noexcept (true)
;
extern __pid_t getpid (void) noexcept (true);
extern __pid_t getppid (void) noexcept (true);
extern __pid_t getpgrp (void) noexcept (true);
extern __pid_t __getpgid (__pid_t __pid) noexcept (true);
extern __pid_t getpgid (__pid_t __pid) noexcept (true);
extern int setpgid (__pid_t __pid, __pid_t __pgid) noexcept (true);
# 682 "/usr/include/unistd.h" 3 4
extern int setpgrp (void) noexcept (true);
extern __pid_t setsid (void) noexcept (true);
extern __pid_t getsid (__pid_t __pid) noexcept (true);
extern __uid_t getuid (void) noexcept (true);
extern __uid_t geteuid (void) noexcept (true);
extern __gid_t getgid (void) noexcept (true);
extern __gid_t getegid (void) noexcept (true);
extern int getgroups (int __size, __gid_t __list[]) noexcept (true)
;
extern int group_member (__gid_t __gid) noexcept (true);
extern int setuid (__uid_t __uid) noexcept (true) ;
extern int setreuid (__uid_t __ruid, __uid_t __euid) noexcept (true) ;
extern int seteuid (__uid_t __uid) noexcept (true) ;
extern int setgid (__gid_t __gid) noexcept (true) ;
extern int setregid (__gid_t __rgid, __gid_t __egid) noexcept (true) ;
extern int setegid (__gid_t __gid) noexcept (true) ;
extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid)
noexcept (true);
extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid)
noexcept (true);
extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid)
noexcept (true) ;
extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid)
noexcept (true) ;
extern __pid_t fork (void) noexcept (true);
extern __pid_t vfork (void) noexcept (true);
extern __pid_t _Fork (void) noexcept (true);
extern char *ttyname (int __fd) noexcept (true);
extern int ttyname_r (int __fd, char *__buf, size_t __buflen)
noexcept (true) __attribute__ ((__nonnull__ (2)))
;
extern int isatty (int __fd) noexcept (true);
extern int ttyslot (void) noexcept (true);
extern int link (const char *__from, const char *__to)
noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ;
extern int linkat (int __fromfd, const char *__from, int __tofd,
const char *__to, int __flags)
noexcept (true) __attribute__ ((__nonnull__ (2, 4))) ;
extern int symlink (const char *__from, const char *__to)
noexcept (true) __attribute__ ((__nonnull__ (1, 2))) ;
extern ssize_t readlink (const char *__restrict __path,
char *__restrict __buf, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)))
;
extern int symlinkat (const char *__from, int __tofd,
const char *__to) noexcept (true) __attribute__ ((__nonnull__ (1, 3))) ;
extern ssize_t readlinkat (int __fd, const char *__restrict __path,
char *__restrict __buf, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (2, 3)))
;
extern int unlink (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int unlinkat (int __fd, const char *__name, int __flag)
noexcept (true) __attribute__ ((__nonnull__ (2)));
extern int rmdir (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern __pid_t tcgetpgrp (int __fd) noexcept (true);
extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) noexcept (true);
extern char *getlogin (void);
extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1)))
;
extern int setlogin (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1)));
# 1 "/usr/include/bits/getopt_posix.h" 1 3 4
# 27 "/usr/include/bits/getopt_posix.h" 3 4
# 1 "/usr/include/bits/getopt_core.h" 1 3 4
# 28 "/usr/include/bits/getopt_core.h" 3 4
extern "C" {
extern char *optarg;
# 50 "/usr/include/bits/getopt_core.h" 3 4
extern int optind;
extern int opterr;
extern int optopt;
# 91 "/usr/include/bits/getopt_core.h" 3 4
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
noexcept (true) __attribute__ ((__nonnull__ (2, 3)));
}
# 28 "/usr/include/bits/getopt_posix.h" 2 3 4
extern "C" {
# 49 "/usr/include/bits/getopt_posix.h" 3 4
}
# 904 "/usr/include/unistd.h" 2 3 4
extern int gethostname (char *__name, size_t __len) noexcept (true) __attribute__ ((__nonnull__ (1)))
;
extern int sethostname (const char *__name, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int sethostid (long int __id) noexcept (true) ;
extern int getdomainname (char *__name, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (1)))
;
extern int setdomainname (const char *__name, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int vhangup (void) noexcept (true);
extern int revoke (const char *__file) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int profil (unsigned short int *__sample_buffer, size_t __size,
size_t __offset, unsigned int __scale)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int acct (const char *__name) noexcept (true);
extern char *getusershell (void) noexcept (true);
extern void endusershell (void) noexcept (true);
extern void setusershell (void) noexcept (true);
extern int daemon (int __nochdir, int __noclose) noexcept (true) ;
extern int chroot (const char *__path) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1)));
extern int fsync (int __fd);
extern int syncfs (int __fd) noexcept (true);
extern long int gethostid (void);
extern void sync (void) noexcept (true);
extern int getpagesize (void) noexcept (true) __attribute__ ((__const__));
extern int getdtablesize (void) noexcept (true);
# 1030 "/usr/include/unistd.h" 3 4
extern int truncate (const char *__file, __off64_t __length) noexcept (true) __asm__ ("" "truncate64") __attribute__ ((__nonnull__ (1))) ;
extern int truncate64 (const char *__file, __off64_t __length)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
# 1052 "/usr/include/unistd.h" 3 4
extern int ftruncate (int __fd, __off64_t __length) noexcept (true) __asm__ ("" "ftruncate64") ;
extern int ftruncate64 (int __fd, __off64_t __length) noexcept (true) ;
# 1070 "/usr/include/unistd.h" 3 4
extern int brk (void *__addr) noexcept (true) ;
extern void *sbrk (intptr_t __delta) noexcept (true);
# 1091 "/usr/include/unistd.h" 3 4
extern long int syscall (long int __sysno, ...) noexcept (true);
# 1117 "/usr/include/unistd.h" 3 4
extern int lockf (int __fd, int __cmd, __off64_t __len) __asm__ ("" "lockf64") ;
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
# 1142 "/usr/include/unistd.h" 3 4
ssize_t copy_file_range (int __infd, __off64_t *__pinoff,
int __outfd, __off64_t *__poutoff,
size_t __length, unsigned int __flags);
extern int fdatasync (int __fildes);
# 1162 "/usr/include/unistd.h" 3 4
extern char *crypt (const char *__key, const char *__salt)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern void swab (const void *__restrict __from, void *__restrict __to,
ssize_t __n) noexcept (true) __attribute__ ((__nonnull__ (1, 2)))
;
# 1201 "/usr/include/unistd.h" 3 4
int getentropy (void *__buffer, size_t __length)
;
# 1211 "/usr/include/unistd.h" 3 4
extern int close_range (unsigned int __fd, unsigned int __max_fd,
int __flags) noexcept (true);
# 1221 "/usr/include/unistd.h" 3 4
# 1 "/usr/include/bits/unistd_ext.h" 1 3 4
# 34 "/usr/include/bits/unistd_ext.h" 3 4
extern __pid_t gettid (void) noexcept (true);
# 1 "/usr/include/linux/close_range.h" 1 3 4
# 39 "/usr/include/bits/unistd_ext.h" 2 3 4
# 1222 "/usr/include/unistd.h" 2 3 4
}
# 79 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/stdlib/libstdcpp3.hpp" 2 3
# 49 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/select_platform_config.hpp" 1 3
# 54 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/platform/linux.hpp" 1 3
# 15 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/platform/linux.hpp" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 1 3
# 40 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
# 79 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
# 1 "/usr/include/stdlib.h" 1 3 4
# 26 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/bits/libc-header-start.h" 1 3 4
# 27 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3 4
# 77 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3 4
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3 4
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 87 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_wchar_t.h" 1 3 4
# 88 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 1 "/usr/lib/clang/18/include/__stddef_null.h" 1 3 4
# 93 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 33 "/usr/include/stdlib.h" 2 3 4
extern "C" {
# 1 "/usr/include/bits/waitflags.h" 1 3 4
# 41 "/usr/include/stdlib.h" 2 3 4
# 1 "/usr/include/bits/waitstatus.h" 1 3 4
# 42 "/usr/include/stdlib.h" 2 3 4
# 56 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/bits/floatn.h" 1 3 4
# 119 "/usr/include/bits/floatn.h" 3 4
# 1 "/usr/include/bits/floatn-common.h" 1 3 4
# 24 "/usr/include/bits/floatn-common.h" 3 4
# 1 "/usr/include/bits/long-double.h" 1 3 4
# 25 "/usr/include/bits/floatn-common.h" 2 3 4
# 214 "/usr/include/bits/floatn-common.h" 3 4
typedef float _Float32;
# 251 "/usr/include/bits/floatn-common.h" 3 4
typedef double _Float64;
# 268 "/usr/include/bits/floatn-common.h" 3 4
typedef double _Float32x;
# 285 "/usr/include/bits/floatn-common.h" 3 4
typedef long double _Float64x;
# 120 "/usr/include/bits/floatn.h" 2 3 4
# 57 "/usr/include/stdlib.h" 2 3 4
typedef struct
{
int quot;
int rem;
} div_t;
typedef struct
{
long int quot;
long int rem;
} ldiv_t;
__extension__ typedef struct
{
long long int quot;
long long int rem;
} lldiv_t;
# 98 "/usr/include/stdlib.h" 3 4
extern size_t __ctype_get_mb_cur_max (void) noexcept (true) ;
extern double atof (const char *__nptr)
noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern int atoi (const char *__nptr)
noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern long int atol (const char *__nptr)
noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
__extension__ extern long long int atoll (const char *__nptr)
noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
extern double strtod (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern float strtof (const char *__restrict __nptr,
char **__restrict __endptr) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern long double strtold (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
# 141 "/usr/include/stdlib.h" 3 4
extern _Float32 strtof32 (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern _Float64 strtof64 (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
# 159 "/usr/include/stdlib.h" 3 4
extern _Float32x strtof32x (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern _Float64x strtof64x (const char *__restrict __nptr,
char **__restrict __endptr)
noexcept (true) __attribute__ ((__nonnull__ (1)));
# 177 "/usr/include/stdlib.h" 3 4
extern long int strtol (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern unsigned long int strtoul (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoq (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoll (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtol")
__attribute__ ((__nonnull__ (1)));
extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoul")
__attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll")
__attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull")
__attribute__ ((__nonnull__ (1)));
__extension__
extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoll")
__attribute__ ((__nonnull__ (1)));
__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) noexcept (true) __asm__ ("" "__isoc23_strtoull")
__attribute__ ((__nonnull__ (1)));
# 278 "/usr/include/stdlib.h" 3 4
extern int strfromd (char *__dest, size_t __size, const char *__format,
double __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
extern int strfromf (char *__dest, size_t __size, const char *__format,
float __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
extern int strfroml (char *__dest, size_t __size, const char *__format,
long double __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
# 298 "/usr/include/stdlib.h" 3 4
extern int strfromf32 (char *__dest, size_t __size, const char * __format,
_Float32 __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
extern int strfromf64 (char *__dest, size_t __size, const char * __format,
_Float64 __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
# 316 "/usr/include/stdlib.h" 3 4
extern int strfromf32x (char *__dest, size_t __size, const char * __format,
_Float32x __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
extern int strfromf64x (char *__dest, size_t __size, const char * __format,
_Float64x __f)
noexcept (true) __attribute__ ((__nonnull__ (3)));
# 338 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/bits/types/locale_t.h" 1 3 4
# 22 "/usr/include/bits/types/locale_t.h" 3 4
# 1 "/usr/include/bits/types/__locale_t.h" 1 3 4
# 27 "/usr/include/bits/types/__locale_t.h" 3 4
struct __locale_struct
{
struct __locale_data *__locales[13];
const unsigned short int *__ctype_b;
const int *__ctype_tolower;
const int *__ctype_toupper;
const char *__names[13];
};
typedef struct __locale_struct *__locale_t;
# 23 "/usr/include/bits/types/locale_t.h" 2 3 4
typedef __locale_t locale_t;
# 339 "/usr/include/stdlib.h" 2 3 4
extern long int strtol_l (const char *__restrict __nptr,
char **__restrict __endptr, int __base,
locale_t __loc) noexcept (true) __attribute__ ((__nonnull__ (1, 4)));
extern unsigned long int strtoul_l (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern long long int strtoll_l (const char *__restrict __nptr,
char **__restrict __endptr, int __base,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 4)));
__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr,
char **__restrict __endptr,
int __base, locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 4)));
extern long int strtol_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtol_l")
__attribute__ ((__nonnull__ (1, 4)));
extern unsigned long int strtoul_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoul_l")
__attribute__ ((__nonnull__ (1, 4)));
__extension__
extern long long int strtoll_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoll_l")
__attribute__ ((__nonnull__ (1, 4)));
__extension__
extern unsigned long long int strtoull_l (const char *__restrict __nptr, char **__restrict __endptr, int __base, locale_t __loc) noexcept (true) __asm__ ("" "__isoc23_strtoull_l")
__attribute__ ((__nonnull__ (1, 4)));
# 415 "/usr/include/stdlib.h" 3 4
extern double strtod_l (const char *__restrict __nptr,
char **__restrict __endptr, locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
extern float strtof_l (const char *__restrict __nptr,
char **__restrict __endptr, locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
extern long double strtold_l (const char *__restrict __nptr,
char **__restrict __endptr,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 436 "/usr/include/stdlib.h" 3 4
extern _Float32 strtof32_l (const char *__restrict __nptr,
char **__restrict __endptr,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
extern _Float64 strtof64_l (const char *__restrict __nptr,
char **__restrict __endptr,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 457 "/usr/include/stdlib.h" 3 4
extern _Float32x strtof32x_l (const char *__restrict __nptr,
char **__restrict __endptr,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
extern _Float64x strtof64x_l (const char *__restrict __nptr,
char **__restrict __endptr,
locale_t __loc)
noexcept (true) __attribute__ ((__nonnull__ (1, 3)));
# 480 "/usr/include/stdlib.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) int
atoi (const char *__nptr) noexcept (true)
{
return (int) strtol (__nptr, (char **) __null, 10);
}
extern __inline __attribute__ ((__gnu_inline__)) long int
atol (const char *__nptr) noexcept (true)
{
return strtol (__nptr, (char **) __null, 10);
}
__extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
atoll (const char *__nptr) noexcept (true)
{
return strtoll (__nptr, (char **) __null, 10);
}
# 505 "/usr/include/stdlib.h" 3 4
extern char *l64a (long int __n) noexcept (true) ;
extern long int a64l (const char *__s)
noexcept (true) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
# 1 "/usr/include/sys/types.h" 1 3 4
# 27 "/usr/include/sys/types.h" 3 4
extern "C" {
typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;
typedef __loff_t loff_t;
typedef __ino64_t ino_t;
typedef __ino64_t ino64_t;
typedef __dev_t dev_t;
# 69 "/usr/include/sys/types.h" 3 4
typedef __mode_t mode_t;
typedef __nlink_t nlink_t;
# 103 "/usr/include/sys/types.h" 3 4
typedef __id_t id_t;
# 114 "/usr/include/sys/types.h" 3 4
typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;
typedef __key_t key_t;
# 1 "/usr/include/bits/types/clock_t.h" 1 3 4
typedef __clock_t clock_t;
# 127 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/bits/types/clockid_t.h" 1 3 4
typedef __clockid_t clockid_t;
# 129 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/bits/types/time_t.h" 1 3 4
# 10 "/usr/include/bits/types/time_t.h" 3 4
typedef __time_t time_t;
# 130 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/bits/types/timer_t.h" 1 3 4
typedef __timer_t timer_t;
# 131 "/usr/include/sys/types.h" 2 3 4
typedef __suseconds_t suseconds_t;
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3 4
# 77 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3 4
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3 4
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 145 "/usr/include/sys/types.h" 2 3 4
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 1 "/usr/include/bits/stdint-intn.h" 1 3 4
# 24 "/usr/include/bits/stdint-intn.h" 3 4
typedef __int8_t int8_t;
typedef __int16_t int16_t;
typedef __int32_t int32_t;
typedef __int64_t int64_t;
# 156 "/usr/include/sys/types.h" 2 3 4
typedef __uint8_t u_int8_t;
typedef __uint16_t u_int16_t;
typedef __uint32_t u_int32_t;
typedef __uint64_t u_int64_t;
typedef int register_t __attribute__ ((__mode__ (__word__)));
# 176 "/usr/include/sys/types.h" 3 4
# 1 "/usr/include/endian.h" 1 3 4
# 24 "/usr/include/endian.h" 3 4
# 1 "/usr/include/bits/endian.h" 1 3 4
# 35 "/usr/include/bits/endian.h" 3 4
# 1 "/usr/include/bits/endianness.h" 1 3 4
# 36 "/usr/include/bits/endian.h" 2 3 4
# 25 "/usr/include/endian.h" 2 3 4
# 35 "/usr/include/endian.h" 3 4
# 1 "/usr/include/bits/byteswap.h" 1 3 4
# 33 "/usr/include/bits/byteswap.h" 3 4
static __inline __uint16_t
__bswap_16 (__uint16_t __bsx)
{
return ((__uint16_t) ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)));
}
static __inline __uint32_t
__bswap_32 (__uint32_t __bsx)
{
return ((((__bsx) & 0xff000000u) >> 24) | (((__bsx) & 0x00ff0000u) >> 8) | (((__bsx) & 0x0000ff00u) << 8) | (((__bsx) & 0x000000ffu) << 24));
}
# 69 "/usr/include/bits/byteswap.h" 3 4
__extension__ static __inline __uint64_t
__bswap_64 (__uint64_t __bsx)
{
return ((((__bsx) & 0xff00000000000000ull) >> 56) | (((__bsx) & 0x00ff000000000000ull) >> 40) | (((__bsx) & 0x0000ff0000000000ull) >> 24) | (((__bsx) & 0x000000ff00000000ull) >> 8) | (((__bsx) & 0x00000000ff000000ull) << 8) | (((__bsx) & 0x0000000000ff0000ull) << 24) | (((__bsx) & 0x000000000000ff00ull) << 40) | (((__bsx) & 0x00000000000000ffull) << 56));
}
# 36 "/usr/include/endian.h" 2 3 4
# 1 "/usr/include/bits/uintn-identity.h" 1 3 4
# 32 "/usr/include/bits/uintn-identity.h" 3 4
static __inline __uint16_t
__uint16_identity (__uint16_t __x)
{
return __x;
}
static __inline __uint32_t
__uint32_identity (__uint32_t __x)
{
return __x;
}
static __inline __uint64_t
__uint64_identity (__uint64_t __x)
{
return __x;
}
# 37 "/usr/include/endian.h" 2 3 4
# 177 "/usr/include/sys/types.h" 2 3 4
# 1 "/usr/include/sys/select.h" 1 3 4
# 30 "/usr/include/sys/select.h" 3 4
# 1 "/usr/include/bits/select.h" 1 3 4
# 31 "/usr/include/sys/select.h" 2 3 4
# 1 "/usr/include/bits/types/sigset_t.h" 1 3 4
# 1 "/usr/include/bits/types/__sigset_t.h" 1 3 4
typedef struct
{
unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
} __sigset_t;
# 5 "/usr/include/bits/types/sigset_t.h" 2 3 4
typedef __sigset_t sigset_t;
# 34 "/usr/include/sys/select.h" 2 3 4
# 1 "/usr/include/bits/types/struct_timeval.h" 1 3 4
struct timeval
{
__time_t tv_sec;
__suseconds_t tv_usec;
};
# 38 "/usr/include/sys/select.h" 2 3 4
# 1 "/usr/include/bits/types/struct_timespec.h" 1 3 4
# 11 "/usr/include/bits/types/struct_timespec.h" 3 4
struct timespec
{
__time_t tv_sec;
__syscall_slong_t tv_nsec;
# 31 "/usr/include/bits/types/struct_timespec.h" 3 4
};
# 40 "/usr/include/sys/select.h" 2 3 4
# 49 "/usr/include/sys/select.h" 3 4
typedef long int __fd_mask;
# 59 "/usr/include/sys/select.h" 3 4
typedef struct
{
__fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
} fd_set;
typedef __fd_mask fd_mask;
# 91 "/usr/include/sys/select.h" 3 4
extern "C" {
# 102 "/usr/include/sys/select.h" 3 4
extern int select (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
struct timeval *__restrict __timeout);
# 127 "/usr/include/sys/select.h" 3 4
extern int pselect (int __nfds, fd_set *__restrict __readfds,
fd_set *__restrict __writefds,
fd_set *__restrict __exceptfds,
const struct timespec *__restrict __timeout,
const __sigset_t *__restrict __sigmask);
# 153 "/usr/include/sys/select.h" 3 4
}
# 180 "/usr/include/sys/types.h" 2 3 4
typedef __blksize_t blksize_t;
# 205 "/usr/include/sys/types.h" 3 4
typedef __blkcnt64_t blkcnt_t;
typedef __fsblkcnt64_t fsblkcnt_t;
typedef __fsfilcnt64_t fsfilcnt_t;
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;
# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4
# 23 "/usr/include/bits/pthreadtypes.h" 3 4
# 1 "/usr/include/bits/thread-shared-types.h" 1 3 4
# 44 "/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/bits/pthreadtypes-arch.h" 1 3 4
# 21 "/usr/include/bits/pthreadtypes-arch.h" 3 4
# 1 "/usr/include/bits/wordsize.h" 1 3 4
# 22 "/usr/include/bits/pthreadtypes-arch.h" 2 3 4
# 45 "/usr/include/bits/thread-shared-types.h" 2 3 4
# 1 "/usr/include/bits/atomic_wide_counter.h" 1 3 4
# 25 "/usr/include/bits/atomic_wide_counter.h" 3 4
typedef union
{
__extension__ unsigned long long int __value64;
struct
{
unsigned int __low;
unsigned int __high;
} __value32;
} __atomic_wide_counter;
# 47 "/usr/include/bits/thread-shared-types.h" 2 3 4
typedef struct __pthread_internal_list
{
struct __pthread_internal_list *__prev;
struct __pthread_internal_list *__next;
} __pthread_list_t;
typedef struct __pthread_internal_slist
{
struct __pthread_internal_slist *__next;
} __pthread_slist_t;
# 76 "/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/bits/struct_mutex.h" 1 3 4
# 22 "/usr/include/bits/struct_mutex.h" 3 4
struct __pthread_mutex_s
{
int __lock;
unsigned int __count;
int __owner;
unsigned int __nusers;
int __kind;
short __spins;
short __elision;
__pthread_list_t __list;
# 53 "/usr/include/bits/struct_mutex.h" 3 4
};
# 77 "/usr/include/bits/thread-shared-types.h" 2 3 4
# 89 "/usr/include/bits/thread-shared-types.h" 3 4
# 1 "/usr/include/bits/struct_rwlock.h" 1 3 4
# 23 "/usr/include/bits/struct_rwlock.h" 3 4
struct __pthread_rwlock_arch_t
{
unsigned int __readers;
unsigned int __writers;
unsigned int __wrphase_futex;
unsigned int __writers_futex;
unsigned int __pad3;
unsigned int __pad4;
int __cur_writer;
int __shared;
signed char __rwelision;
unsigned char __pad1[7];
unsigned long int __pad2;
unsigned int __flags;
# 55 "/usr/include/bits/struct_rwlock.h" 3 4
};
# 90 "/usr/include/bits/thread-shared-types.h" 2 3 4
struct __pthread_cond_s
{
__atomic_wide_counter __wseq;
__atomic_wide_counter __g1_start;
unsigned int __g_refs[2] ;
unsigned int __g_size[2];
unsigned int __g1_orig_size;
unsigned int __wrefs;
unsigned int __g_signals[2];
};
typedef unsigned int __tss_t;
typedef unsigned long int __thrd_t;
typedef struct
{
int __data ;
} __once_flag;
# 24 "/usr/include/bits/pthreadtypes.h" 2 3 4
typedef unsigned long int pthread_t;
typedef union
{
char __size[4];
int __align;
} pthread_mutexattr_t;
typedef union
{
char __size[4];
int __align;
} pthread_condattr_t;
typedef unsigned int pthread_key_t;
typedef int pthread_once_t;
union pthread_attr_t
{
char __size[56];
long int __align;
};
typedef union pthread_attr_t pthread_attr_t;
typedef union
{
struct __pthread_mutex_s __data;
char __size[40];
long int __align;
} pthread_mutex_t;
typedef union
{
struct __pthread_cond_s __data;
char __size[48];
__extension__ long long int __align;
} pthread_cond_t;
typedef union
{
struct __pthread_rwlock_arch_t __data;
char __size[56];
long int __align;
} pthread_rwlock_t;
typedef union
{
char __size[8];
long int __align;
} pthread_rwlockattr_t;
typedef volatile int pthread_spinlock_t;
typedef union
{
char __size[32];
long int __align;
} pthread_barrier_t;
typedef union
{
char __size[4];
int __align;
} pthread_barrierattr_t;
# 228 "/usr/include/sys/types.h" 2 3 4
}
# 515 "/usr/include/stdlib.h" 2 3 4
extern long int random (void) noexcept (true);
extern void srandom (unsigned int __seed) noexcept (true);
extern char *initstate (unsigned int __seed, char *__statebuf,
size_t __statelen) noexcept (true) __attribute__ ((__nonnull__ (2)));
extern char *setstate (char *__statebuf) noexcept (true) __attribute__ ((__nonnull__ (1)));
struct random_data
{
int32_t *fptr;
int32_t *rptr;
int32_t *state;
int rand_type;
int rand_deg;
int rand_sep;
int32_t *end_ptr;
};
extern int random_r (struct random_data *__restrict __buf,
int32_t *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int srandom_r (unsigned int __seed, struct random_data *__buf)
noexcept (true) __attribute__ ((__nonnull__ (2)));
extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
size_t __statelen,
struct random_data *__restrict __buf)
noexcept (true) __attribute__ ((__nonnull__ (2, 4)));
extern int setstate_r (char *__restrict __statebuf,
struct random_data *__restrict __buf)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int rand (void) noexcept (true);
extern void srand (unsigned int __seed) noexcept (true);
extern int rand_r (unsigned int *__seed) noexcept (true);
extern double drand48 (void) noexcept (true);
extern double erand48 (unsigned short int __xsubi[3]) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern long int lrand48 (void) noexcept (true);
extern long int nrand48 (unsigned short int __xsubi[3])
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern long int mrand48 (void) noexcept (true);
extern long int jrand48 (unsigned short int __xsubi[3])
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern void srand48 (long int __seedval) noexcept (true);
extern unsigned short int *seed48 (unsigned short int __seed16v[3])
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern void lcong48 (unsigned short int __param[7]) noexcept (true) __attribute__ ((__nonnull__ (1)));
struct drand48_data
{
unsigned short int __x[3];
unsigned short int __old_x[3];
unsigned short int __c;
unsigned short int __init;
__extension__ unsigned long long int __a;
};
extern int drand48_r (struct drand48_data *__restrict __buffer,
double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int erand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
double *__restrict __result) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int lrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int nrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int mrand48_r (struct drand48_data *__restrict __buffer,
long int *__restrict __result)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int jrand48_r (unsigned short int __xsubi[3],
struct drand48_data *__restrict __buffer,
long int *__restrict __result)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
noexcept (true) __attribute__ ((__nonnull__ (2)));
extern int seed48_r (unsigned short int __seed16v[3],
struct drand48_data *__buffer) noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern int lcong48_r (unsigned short int __param[7],
struct drand48_data *__buffer)
noexcept (true) __attribute__ ((__nonnull__ (1, 2)));
extern __uint32_t arc4random (void)
noexcept (true) ;
extern void arc4random_buf (void *__buf, size_t __size)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
noexcept (true) ;
extern void *malloc (size_t __size) noexcept (true) __attribute__ ((__malloc__))
;
extern void *calloc (size_t __nmemb, size_t __size)
noexcept (true) __attribute__ ((__malloc__)) ;
extern void *realloc (void *__ptr, size_t __size)
noexcept (true) __attribute__ ((__warn_unused_result__)) ;
extern void free (void *__ptr) noexcept (true);
extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
noexcept (true) __attribute__ ((__warn_unused_result__))
;
extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
noexcept (true) ;
# 1 "/usr/include/alloca.h" 1 3 4
# 24 "/usr/include/alloca.h" 3 4
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3 4
# 77 "/usr/lib/clang/18/include/stddef.h" 3 4
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3 4
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3 4
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3 4
# 25 "/usr/include/alloca.h" 2 3 4
extern "C" {
extern void *alloca (size_t __size) noexcept (true);
}
# 707 "/usr/include/stdlib.h" 2 3 4
extern void *valloc (size_t __size) noexcept (true) __attribute__ ((__malloc__))
;
extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern void *aligned_alloc (size_t __alignment, size_t __size)
noexcept (true) __attribute__ ((__malloc__)) __attribute__ ((__alloc_align__ (1)))
;
extern void abort (void) noexcept (true) __attribute__ ((__noreturn__));
extern int atexit (void (*__func) (void)) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern "C++" int at_quick_exit (void (*__func) (void))
noexcept (true) __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
# 749 "/usr/include/stdlib.h" 3 4
extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
noexcept (true) __attribute__ ((__nonnull__ (1)));
extern void exit (int __status) noexcept (true) __attribute__ ((__noreturn__));
extern void quick_exit (int __status) noexcept (true) __attribute__ ((__noreturn__));
extern void _Exit (int __status) noexcept (true) __attribute__ ((__noreturn__));
extern char *getenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern char *secure_getenv (const char *__name)
noexcept (true) __attribute__ ((__nonnull__ (1))) ;
extern int putenv (char *__string) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int setenv (const char *__name, const char *__value, int __replace)
noexcept (true) __attribute__ ((__nonnull__ (2)));
extern int unsetenv (const char *__name) noexcept (true) __attribute__ ((__nonnull__ (1)));
extern int clearenv (void) noexcept (true);
# 814 "/usr/include/stdlib.h" 3 4
extern char *mktemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1)));
# 830 "/usr/include/stdlib.h" 3 4
extern int mkstemp (char *__template) __asm__ ("" "mkstemp64")
__attribute__ ((__nonnull__ (1))) ;
extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
# 852 "/usr/include/stdlib.h" 3 4
extern int mkstemps (char *__template, int __suffixlen) __asm__ ("" "mkstemps64") __attribute__ ((__nonnull__ (1))) ;
extern int mkstemps64 (char *__template, int __suffixlen)
__attribute__ ((__nonnull__ (1))) ;
# 870 "/usr/include/stdlib.h" 3 4
extern char *mkdtemp (char *__template) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
# 884 "/usr/include/stdlib.h" 3 4
extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64")
__attribute__ ((__nonnull__ (1))) ;
extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
# 905 "/usr/include/stdlib.h" 3 4
extern int mkostemps (char *__template, int __suffixlen, int __flags) __asm__ ("" "mkostemps64")
__attribute__ ((__nonnull__ (1))) ;
extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
__attribute__ ((__nonnull__ (1))) ;
# 923 "/usr/include/stdlib.h" 3 4
extern int system (const char *__command) ;
extern char *canonicalize_file_name (const char *__name)
noexcept (true) __attribute__ ((__nonnull__ (1))) __attribute__ ((__malloc__))
;
# 940 "/usr/include/stdlib.h" 3 4
extern char *realpath (const char *__restrict __name,
char *__restrict __resolved) noexcept (true) ;
typedef int (*__compar_fn_t) (const void *, const void *);
typedef __compar_fn_t comparison_fn_t;
typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
extern void *bsearch (const void *__key, const void *__base,
size_t __nmemb, size_t __size, __compar_fn_t __compar)
__attribute__ ((__nonnull__ (1, 2, 5))) ;
# 1 "/usr/include/bits/stdlib-bsearch.h" 1 3 4
# 19 "/usr/include/bits/stdlib-bsearch.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) void *
bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar)
{
size_t __l, __u, __idx;
const void *__p;
int __comparison;
__l = 0;
__u = __nmemb;
while (__l < __u)
{
__idx = (__l + __u) / 2;
__p = (const void *) (((const char *) __base) + (__idx * __size));
__comparison = (*__compar) (__key, __p);
if (__comparison < 0)
__u = __idx;
else if (__comparison > 0)
__l = __idx + 1;
else
{
return (void *) __p;
}
}
return __null;
}
# 966 "/usr/include/stdlib.h" 2 3 4
extern void qsort (void *__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
__compar_d_fn_t __compar, void *__arg)
__attribute__ ((__nonnull__ (1, 4)));
extern int abs (int __x) noexcept (true) __attribute__ ((__const__)) ;
extern long int labs (long int __x) noexcept (true) __attribute__ ((__const__)) ;
__extension__ extern long long int llabs (long long int __x)
noexcept (true) __attribute__ ((__const__)) ;
extern div_t div (int __numer, int __denom)
noexcept (true) __attribute__ ((__const__)) ;
extern ldiv_t ldiv (long int __numer, long int __denom)
noexcept (true) __attribute__ ((__const__)) ;
__extension__ extern lldiv_t lldiv (long long int __numer,
long long int __denom)
noexcept (true) __attribute__ ((__const__)) ;
# 1012 "/usr/include/stdlib.h" 3 4
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign) noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *gcvt (double __value, int __ndigit, char *__buf)
noexcept (true) __attribute__ ((__nonnull__ (3))) ;
extern char *qecvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qfcvt (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign)
noexcept (true) __attribute__ ((__nonnull__ (3, 4))) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf)
noexcept (true) __attribute__ ((__nonnull__ (3))) ;
extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
int *__restrict __sign, char *__restrict __buf,
size_t __len) noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qecvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int qfcvt_r (long double __value, int __ndigit,
int *__restrict __decpt, int *__restrict __sign,
char *__restrict __buf, size_t __len)
noexcept (true) __attribute__ ((__nonnull__ (3, 4, 5)));
extern int mblen (const char *__s, size_t __n) noexcept (true);
extern int mbtowc (wchar_t *__restrict __pwc,
const char *__restrict __s, size_t __n) noexcept (true);
extern int wctomb (char *__s, wchar_t __wchar) noexcept (true);
extern size_t mbstowcs (wchar_t *__restrict __pwcs,
const char *__restrict __s, size_t __n) noexcept (true)
;
extern size_t wcstombs (char *__restrict __s,
const wchar_t *__restrict __pwcs, size_t __n)
noexcept (true)
;
extern int rpmatch (const char *__response) noexcept (true) __attribute__ ((__nonnull__ (1))) ;
# 1099 "/usr/include/stdlib.h" 3 4
extern int getsubopt (char **__restrict __optionp,
char *const *__restrict __tokens,
char **__restrict __valuep)
noexcept (true) __attribute__ ((__nonnull__ (1, 2, 3))) ;
extern int posix_openpt (int __oflag) ;
extern int grantpt (int __fd) noexcept (true);
extern int unlockpt (int __fd) noexcept (true);
extern char *ptsname (int __fd) noexcept (true) ;
extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
noexcept (true) __attribute__ ((__nonnull__ (2))) ;
extern int getpt (void);
extern int getloadavg (double __loadavg[], int __nelem)
noexcept (true) __attribute__ ((__nonnull__ (1)));
# 1155 "/usr/include/stdlib.h" 3 4
# 1 "/usr/include/bits/stdlib-float.h" 1 3 4
# 24 "/usr/include/bits/stdlib-float.h" 3 4
extern __inline __attribute__ ((__gnu_inline__)) double
atof (const char *__nptr) noexcept (true)
{
return strtod (__nptr, (char **) __null);
}
# 1156 "/usr/include/stdlib.h" 2 3 4
# 1167 "/usr/include/stdlib.h" 3 4
}
# 80 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/std_abs.h" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/std_abs.h" 3
# 46 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/std_abs.h" 3
extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::abs;
inline long
abs(long __i) { return __builtin_labs(__i); }
inline long long
abs(long long __x) { return __builtin_llabs (__x); }
# 70 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/std_abs.h" 3
inline constexpr double
abs(double __x)
{ return __builtin_fabs(__x); }
inline constexpr float
abs(float __x)
{ return __builtin_fabsf(__x); }
inline constexpr long double
abs(long double __x)
{ return __builtin_fabsl(__x); }
__extension__ inline constexpr __int128
abs(__int128 __x) { return __x >= 0 ? __x : -__x; }
# 135 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/std_abs.h" 3
__extension__ inline constexpr
__float128
abs(__float128 __x)
{
return __builtin_fabsf128(__x);
}
}
}
# 82 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 2 3
# 125 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
extern "C++"
{
namespace std __attribute__ ((__visibility__ ("default")))
{
using ::div_t;
using ::ldiv_t;
using ::abort;
using ::aligned_alloc;
using ::atexit;
using ::at_quick_exit;
using ::atof;
using ::atoi;
using ::atol;
using ::bsearch;
using ::calloc;
using ::div;
using ::exit;
using ::free;
using ::getenv;
using ::labs;
using ::ldiv;
using ::malloc;
using ::mblen;
using ::mbstowcs;
using ::mbtowc;
using ::qsort;
using ::quick_exit;
using ::rand;
using ::realloc;
using ::srand;
using ::strtod;
using ::strtol;
using ::strtoul;
using ::system;
using ::wcstombs;
using ::wctomb;
inline ldiv_t
div(long __i, long __j) noexcept { return ldiv(__i, __j); }
}
# 199 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
using ::lldiv_t;
using ::_Exit;
using ::llabs;
inline lldiv_t
div(long long __n, long long __d)
{ lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
using ::lldiv;
# 231 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
using ::atoll;
using ::strtoll;
using ::strtoull;
using ::strtof;
using ::strtold;
}
namespace std
{
using ::__gnu_cxx::lldiv_t;
using ::__gnu_cxx::_Exit;
using ::__gnu_cxx::llabs;
using ::__gnu_cxx::div;
using ::__gnu_cxx::lldiv;
using ::__gnu_cxx::atoll;
using ::__gnu_cxx::strtof;
using ::__gnu_cxx::strtoll;
using ::__gnu_cxx::strtoull;
using ::__gnu_cxx::strtold;
}
# 275 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstdlib" 3
}
# 16 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/platform/linux.hpp" 2 3
# 75 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/platform/linux.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/posix_features.hpp" 1 3
# 76 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/platform/linux.hpp" 2 3
# 58 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 1 3
# 35 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 3
# 510 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 3
namespace boost{
__extension__ typedef long long long_long_type;
__extension__ typedef unsigned long long ulong_long_type;
}
namespace boost{
__extension__ typedef __int128 int128_type;
__extension__ typedef unsigned __int128 uint128_type;
}
# 572 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/helper_macros.hpp" 1 3
# 573 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 2 3
# 1282 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/cxx_composite.hpp" 1 3
# 1283 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/detail/suffix.hpp" 2 3
# 62 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config.hpp" 2 3
# 15 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/workaround.hpp" 1 3
# 155 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/workaround.hpp" 3
namespace boost {
namespace container {
template <typename T1>
inline __attribute__ ((__always_inline__)) constexpr void ignore(T1 const&)
{}
}}
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 1 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 28 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/container_fwd.hpp" 1 3
# 63 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/container_fwd.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/std_fwd.hpp" 1 3
# 26 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/std_fwd.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/std_ns_begin.hpp" 1 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/std_fwd.hpp" 2 3
namespace std __attribute__ ((__visibility__ ("default"))) {
template<class T>
class allocator;
template<class T>
struct less;
template<class T>
struct equal_to;
template<class T1, class T2>
struct pair;
template<class T>
struct char_traits;
struct input_iterator_tag;
struct forward_iterator_tag;
struct bidirectional_iterator_tag;
struct random_access_iterator_tag;
template<class Container>
class insert_iterator;
struct allocator_arg_t;
struct piecewise_construct_t;
template <class Ptr>
struct pointer_traits;
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/std_ns_end.hpp" 1 3
# 61 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/std_fwd.hpp" 2 3
# 64 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/container_fwd.hpp" 2 3
namespace boost{
namespace intrusive{
namespace detail{
}}}
namespace boost{ namespace container{ namespace dtl{
namespace bi = boost::intrusive;
namespace bid = boost::intrusive::detail;
}}}
namespace boost{ namespace container{ namespace pmr{
namespace bi = boost::intrusive;
namespace bid = boost::intrusive::detail;
}}}
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstddef" 1 3
# 43 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstddef" 3
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3
# 72 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_ptrdiff_t.h" 1 3
# 18 "/usr/lib/clang/18/include/__stddef_ptrdiff_t.h" 3
typedef long int ptrdiff_t;
# 73 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3
# 87 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_wchar_t.h" 1 3
# 88 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_null.h" 1 3
# 93 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_nullptr_t.h" 1 3
# 98 "/usr/lib/clang/18/include/stddef.h" 2 3
# 107 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_max_align_t.h" 1 3
# 19 "/usr/lib/clang/18/include/__stddef_max_align_t.h" 3
typedef struct {
long long __clang_max_align_nonce1
__attribute__((__aligned__(__alignof__(long long))));
long double __clang_max_align_nonce2
__attribute__((__aligned__(__alignof__(long double))));
} max_align_t;
# 108 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_offsetof.h" 1 3
# 113 "/usr/lib/clang/18/include/stddef.h" 2 3
# 51 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstddef" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 54 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstddef" 2 3
extern "C++"
{
namespace std
{
using ::max_align_t;
}
namespace std
{
enum class byte : unsigned char {};
template<typename _IntegerType> struct __byte_operand { };
template<> struct __byte_operand<bool> { using __type = byte; };
template<> struct __byte_operand<char> { using __type = byte; };
template<> struct __byte_operand<signed char> { using __type = byte; };
template<> struct __byte_operand<unsigned char> { using __type = byte; };
template<> struct __byte_operand<wchar_t> { using __type = byte; };
template<> struct __byte_operand<char8_t> { using __type = byte; };
template<> struct __byte_operand<char16_t> { using __type = byte; };
template<> struct __byte_operand<char32_t> { using __type = byte; };
template<> struct __byte_operand<short> { using __type = byte; };
template<> struct __byte_operand<unsigned short> { using __type = byte; };
template<> struct __byte_operand<int> { using __type = byte; };
template<> struct __byte_operand<unsigned int> { using __type = byte; };
template<> struct __byte_operand<long> { using __type = byte; };
template<> struct __byte_operand<unsigned long> { using __type = byte; };
template<> struct __byte_operand<long long> { using __type = byte; };
template<> struct __byte_operand<unsigned long long> { using __type = byte; };
template<> struct __byte_operand<__int128>
{ using __type = byte; };
template<> struct __byte_operand<unsigned __int128>
{ using __type = byte; };
# 109 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cstddef" 3
template<typename _IntegerType>
struct __byte_operand<const _IntegerType>
: __byte_operand<_IntegerType> { };
template<typename _IntegerType>
struct __byte_operand<volatile _IntegerType>
: __byte_operand<_IntegerType> { };
template<typename _IntegerType>
struct __byte_operand<const volatile _IntegerType>
: __byte_operand<_IntegerType> { };
template<typename _IntegerType>
using __byte_op_t = typename __byte_operand<_IntegerType>::__type;
template<typename _IntegerType>
[[__gnu__::__always_inline__]]
constexpr __byte_op_t<_IntegerType>
operator<<(byte __b, _IntegerType __shift) noexcept
{ return (byte)(unsigned char)((unsigned)__b << __shift); }
template<typename _IntegerType>
[[__gnu__::__always_inline__]]
constexpr __byte_op_t<_IntegerType>
operator>>(byte __b, _IntegerType __shift) noexcept
{ return (byte)(unsigned char)((unsigned)__b >> __shift); }
[[__gnu__::__always_inline__]]
constexpr byte
operator|(byte __l, byte __r) noexcept
{ return (byte)(unsigned char)((unsigned)__l | (unsigned)__r); }
[[__gnu__::__always_inline__]]
constexpr byte
operator&(byte __l, byte __r) noexcept
{ return (byte)(unsigned char)((unsigned)__l & (unsigned)__r); }
[[__gnu__::__always_inline__]]
constexpr byte
operator^(byte __l, byte __r) noexcept
{ return (byte)(unsigned char)((unsigned)__l ^ (unsigned)__r); }
[[__gnu__::__always_inline__]]
constexpr byte
operator~(byte __b) noexcept
{ return (byte)(unsigned char)~(unsigned)__b; }
template<typename _IntegerType>
[[__gnu__::__always_inline__]]
constexpr __byte_op_t<_IntegerType>&
operator<<=(byte& __b, _IntegerType __shift) noexcept
{ return __b = __b << __shift; }
template<typename _IntegerType>
[[__gnu__::__always_inline__]]
constexpr __byte_op_t<_IntegerType>&
operator>>=(byte& __b, _IntegerType __shift) noexcept
{ return __b = __b >> __shift; }
[[__gnu__::__always_inline__]]
constexpr byte&
operator|=(byte& __l, byte __r) noexcept
{ return __l = __l | __r; }
[[__gnu__::__always_inline__]]
constexpr byte&
operator&=(byte& __l, byte __r) noexcept
{ return __l = __l & __r; }
[[__gnu__::__always_inline__]]
constexpr byte&
operator^=(byte& __l, byte __r) noexcept
{ return __l = __l ^ __r; }
template<typename _IntegerType>
[[nodiscard,__gnu__::__always_inline__]]
constexpr _IntegerType
to_integer(__byte_op_t<_IntegerType> __b) noexcept
{ return _IntegerType(__b); }
}
}
# 83 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/container_fwd.hpp" 2 3
namespace boost {
namespace container {
template<class T>
class new_allocator;
template <class T
,class Allocator = void
,class Options = void>
class vector;
template <class T
,class Allocator = void >
class stable_vector;
template < class T
, std::size_t Capacity
, class Options = void>
class static_vector;
template < class T
, class Allocator = void
, class Options = void >
class small_vector_base;
template < class T
, std::size_t N
, class Allocator = void
, class Options = void >
class small_vector;
template <class T
,class Allocator = void
,class Options = void>
class devector;
template <class T
,class Allocator = void
,class Options = void>
class deque;
template <class T
,class Allocator = void >
class list;
template <class T
,class Allocator = void >
class slist;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void>
class set;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class multiset;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class map;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class multimap;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void >
class flat_set;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void >
class flat_multiset;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void >
class flat_map;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void >
class flat_multimap;
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_set = flat_set<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_multiset = flat_multiset<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_map = flat_map<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_multimap = flat_multimap<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_set_of
{
typedef flat_set<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_multiset_of
{
typedef flat_multiset<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_map_of
{
typedef flat_map<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_multimap_of
{
typedef flat_multimap<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
template <class CharT
,class Traits = std::char_traits<CharT>
,class Allocator = void >
class basic_string;
typedef basic_string <char> string;
typedef basic_string<wchar_t> wstring;
static const std::size_t ADP_nodes_per_block = 256u;
static const std::size_t ADP_max_free_blocks = 2u;
static const std::size_t ADP_overhead_percent = 1u;
static const std::size_t ADP_only_alignment = 0u;
template < class T
, std::size_t NodesPerBlock = ADP_nodes_per_block
, std::size_t MaxFreeBlocks = ADP_max_free_blocks
, std::size_t OverheadPercent = ADP_overhead_percent
, unsigned Version = 2
>
class adaptive_pool;
template < class T
, unsigned Version = 2
, unsigned int AllocationDisableMask = 0>
class allocator;
static const std::size_t NodeAlloc_nodes_per_block = 256u;
template
< class T
, std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
, std::size_t Version = 2>
class node_allocator;
namespace pmr {
class memory_resource;
template<class T>
class polymorphic_allocator;
class monotonic_buffer_resource;
struct pool_options;
template <class Allocator>
class resource_adaptor_imp;
class unsynchronized_pool_resource;
class synchronized_pool_resource;
}
struct ordered_range_t
{};
static const ordered_range_t ordered_range = ordered_range_t();
struct ordered_unique_range_t
: public ordered_range_t
{};
static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
struct default_init_t
{};
static const default_init_t default_init = default_init_t();
struct value_init_t
{};
static const value_init_t value_init = value_init_t();
namespace container_detail_really_deep_namespace {
struct dummy
{
dummy()
{
(void)ordered_range;
(void)ordered_unique_range;
(void)default_init;
}
};
}
typedef const std::piecewise_construct_t & piecewise_construct_t;
}}
# 32 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 1 3
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 1 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_begin.hpp" 1 3
# 28 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/workaround.hpp" 1 3
# 71 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/workaround.hpp" 3
namespace boost {
namespace movelib {
template <typename T1>
inline __attribute__ ((__always_inline__)) constexpr void ignore(T1 const&)
{}
}}
# 29 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 1 3
# 20 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_begin.hpp" 1 3
# 21 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils_core.hpp" 1 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils_core.hpp" 3
namespace boost {
namespace move_detail {
template<typename T>
struct voider { typedef void type; };
template<bool C, typename T1, typename T2>
struct if_c
{
typedef T1 type;
};
template<typename T1, typename T2>
struct if_c<false,T1,T2>
{
typedef T2 type;
};
template<typename T1, typename T2, typename T3>
struct if_ : if_c<0 != T1::value, T2, T3>
{};
struct enable_if_nat{};
template <bool B, class T = enable_if_nat>
struct enable_if_c
{
typedef T type;
};
template <class T>
struct enable_if_c<false, T> {};
template <class Cond, class T = enable_if_nat>
struct enable_if : enable_if_c<Cond::value, T> {};
template <bool B, class T = enable_if_nat>
struct disable_if_c
: enable_if_c<!B, T>
{};
template <class Cond, class T = enable_if_nat>
struct disable_if : enable_if_c<!Cond::value, T> {};
template<class T, T v>
struct integral_constant
{
static const T value = v;
typedef T value_type;
typedef integral_constant<T, v> type;
operator T() const { return value; }
T operator()() const { return value; }
};
typedef integral_constant<bool, true > true_type;
typedef integral_constant<bool, false > false_type;
template<class T, class U>
struct is_same
{
static const bool value = false;
};
template<class T>
struct is_same<T, T>
{
static const bool value = true;
};
template <class T, class U, class R = enable_if_nat>
struct enable_if_same : enable_if<is_same<T, U>, R> {};
template <class T, class U, class R = enable_if_nat>
struct disable_if_same : disable_if<is_same<T, U>, R> {};
}
}
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/addressof.hpp" 1 3
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/addressof.hpp" 3
namespace boost {
namespace move_detail {
# 38 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/addressof.hpp" 3
template<class T>
inline __attribute__ ((__always_inline__)) T *addressof( T & v ) noexcept
{
return __builtin_addressof(v);
}
# 58 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/addressof.hpp" 3
}
}
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 2 3
namespace boost {
template <class T> class rv;
namespace move_detail {
template<class T, class U>
struct is_different
{
static const bool value = !is_same<T, U>::value;
};
template<class F, class Param>
struct apply
{
typedef typename F::template apply<Param>::type type;
};
template< bool C_ >
struct bool_ : integral_constant<bool, C_>
{
inline __attribute__ ((__always_inline__)) operator bool() const { return C_; }
inline __attribute__ ((__always_inline__)) bool operator()() const { return C_; }
};
typedef bool_<true> true_;
typedef bool_<false> false_;
struct nat{};
struct nat2{};
struct nat3{};
template <unsigned N>
struct natN
{};
typedef char yes_type;
struct no_type
{
char _[2];
};
template <class T> struct natify{};
template<class T>
struct remove_reference
{
typedef T type;
};
template<class T>
struct remove_reference<T&>
{
typedef T type;
};
template<class T>
struct remove_reference<T&&>
{
typedef T type;
};
# 142 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
template< class T > struct remove_pointer { typedef T type; };
template< class T > struct remove_pointer<T*> { typedef T type; };
template< class T > struct remove_pointer<T* const> { typedef T type; };
template< class T > struct remove_pointer<T* volatile> { typedef T type; };
template< class T > struct remove_pointer<T* const volatile> { typedef T type; };
template< class T >
struct add_pointer
{
typedef typename remove_reference<T>::type* type;
};
template<class T>
struct add_const
{
typedef const T type;
};
template<class T>
struct add_const<T&>
{
typedef const T& type;
};
template<class T>
struct add_const<T&&>
{
typedef T&& type;
};
template<class T>
struct add_lvalue_reference
{ typedef T& type; };
template<class T> struct add_lvalue_reference<T&> { typedef T& type; };
template<> struct add_lvalue_reference<void> { typedef void type; };
template<> struct add_lvalue_reference<const void> { typedef const void type; };
template<> struct add_lvalue_reference<volatile void> { typedef volatile void type; };
template<> struct add_lvalue_reference<const volatile void>{ typedef const volatile void type; };
template<class T>
struct add_const_lvalue_reference
{
typedef typename remove_reference<T>::type t_unreferenced;
typedef typename add_const<t_unreferenced>::type t_unreferenced_const;
typedef typename add_lvalue_reference
<t_unreferenced_const>::type type;
};
template<class T>
struct is_lvalue_reference
{
static const bool value = false;
};
template<class T>
struct is_lvalue_reference<T&>
{
static const bool value = true;
};
template <class T>
struct identity
{
typedef T type;
typedef typename add_const_lvalue_reference<T>::type reference;
inline __attribute__ ((__always_inline__)) reference operator()(reference t) const
{ return t; }
};
template<class T>
struct is_class_or_union
{
struct twochar { char dummy[2]; };
template <class U>
static char is_class_or_union_tester(void(U::*)(void));
template <class U>
static twochar is_class_or_union_tester(...);
static const bool value = sizeof(is_class_or_union_tester<T>(0)) == sizeof(char);
};
# 254 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
template <class T>
struct has_pointer_type
{
struct two { char c[2]; };
template <class U> static two test(...);
template <class U> static char test(typename U::pointer* = 0);
static const bool value = sizeof(test<T>(0)) == 1;
};
# 278 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
template <class T, class U>
class is_convertible
{
typedef typename add_lvalue_reference<T>::type t_reference;
typedef char true_t;
class false_t { char dummy[2]; };
static false_t dispatch(...);
static true_t dispatch(U);
static t_reference trigger();
public:
static const bool value = sizeof(dispatch(trigger())) == sizeof(true_t);
};
template <class T, class U, bool IsSame = is_same<T, U>::value>
struct is_same_or_convertible
: is_convertible<T, U>
{};
template <class T, class U>
struct is_same_or_convertible<T, U, true>
{
static const bool value = true;
};
template<
bool C
, typename F1
, typename F2
>
struct eval_if_c
: if_c<C,F1,F2>::type
{};
template<
typename C
, typename T1
, typename T2
>
struct eval_if
: if_<C,T1,T2>::type
{};
template<class T, class U, class R = void>
struct enable_if_convertible
: enable_if< is_convertible<T, U>, R>
{};
template<class T, class U, class R = void>
struct disable_if_convertible
: disable_if< is_convertible<T, U>, R>
{};
template<class T, class U, class R = void>
struct enable_if_same_or_convertible
: enable_if< is_same_or_convertible<T, U>, R>
{};
template<class T, class U, class R = void>
struct disable_if_same_or_convertible
: disable_if< is_same_or_convertible<T, U>, R>
{};
template<bool, class B = true_, class C = true_, class D = true_>
struct and_impl
: and_impl<B::value, C, D>
{};
template<>
struct and_impl<true, true_, true_, true_>
{
static const bool value = true;
};
template<class B, class C, class D>
struct and_impl<false, B, C, D>
{
static const bool value = false;
};
template<class A, class B, class C = true_, class D = true_>
struct and_
: and_impl<A::value, B, C, D>
{};
template<bool, class B = false_, class C = false_, class D = false_>
struct or_impl
: or_impl<B::value, C, D>
{};
template<>
struct or_impl<false, false_, false_, false_>
{
static const bool value = false;
};
template<class B, class C, class D>
struct or_impl<true, B, C, D>
{
static const bool value = true;
};
template<class A, class B, class C = false_, class D = false_>
struct or_
: or_impl<A::value, B, C, D>
{};
template<class T>
struct not_
{
static const bool value = !T::value;
};
template<class R, class A, class B, class C = true_, class D = true_>
struct enable_if_and
: enable_if_c< and_<A, B, C, D>::value, R>
{};
template<class R, class A, class B, class C = true_, class D = true_>
struct disable_if_and
: disable_if_c< and_<A, B, C, D>::value, R>
{};
template<class R, class A, class B, class C = false_, class D = false_>
struct enable_if_or
: enable_if_c< or_<A, B, C, D>::value, R>
{};
template<class R, class A, class B, class C = false_, class D = false_>
struct disable_if_or
: disable_if_c< or_<A, B, C, D>::value, R>
{};
template<class T>
struct has_move_emulation_enabled_impl
: is_convertible< T, ::boost::rv<T>& >
{};
template<class T>
struct has_move_emulation_enabled_impl<T&>
{ static const bool value = false; };
template<class T>
struct has_move_emulation_enabled_impl< ::boost::rv<T> >
{ static const bool value = false; };
template <class T>
struct is_rv_impl
{ static const bool value = false; };
template <class T>
struct is_rv_impl< rv<T> >
{ static const bool value = true; };
template <class T>
struct is_rv_impl< const rv<T> >
{ static const bool value = true; };
template< class T >
struct is_rvalue_reference
{ static const bool value = false; };
template< class T >
struct is_rvalue_reference< T&& >
{ static const bool value = true; };
# 500 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
template< class T >
struct add_rvalue_reference
{ typedef T&& type; };
# 531 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
template< class T > struct remove_rvalue_reference { typedef T type; };
template< class T > struct remove_rvalue_reference< T&& > { typedef T type; };
# 558 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 3
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_end.hpp" 1 3
# 562 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/meta_utils.hpp" 2 3
# 32 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cassert" 1 3
# 42 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cassert" 3
# 1 "/usr/include/assert.h" 1 3 4
# 45 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/cassert" 2 3
# 34 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 2 3
# 482 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
namespace boost {
namespace move_detail {
template<class T>
struct is_reference
{ static const bool value = false; };
template<class T>
struct is_reference<T&>
{ static const bool value = true; };
template<class T>
struct is_reference<T&&>
{ static const bool value = true; };
template<class T>
struct is_pointer
{ static const bool value = false; };
template<class T>
struct is_pointer<T*>
{ static const bool value = true; };
template<class T>
struct is_const
{ static const bool value = false; };
template<class T>
struct is_const<const T>
{ static const bool value = true; };
template <typename T> struct unvoid_ref : add_lvalue_reference<T>{};
template <> struct unvoid_ref<void> { typedef unvoid_ref & type; };
template <> struct unvoid_ref<const void> { typedef unvoid_ref & type; };
template <> struct unvoid_ref<volatile void> { typedef unvoid_ref & type; };
template <> struct unvoid_ref<const volatile void> { typedef unvoid_ref & type; };
template <typename T>
struct add_reference : add_lvalue_reference<T>
{};
template <class T>
struct add_const_reference
{ typedef const T &type; };
template <class T>
struct add_const_reference<T&>
{ typedef T& type; };
template<class T, bool Add>
struct add_const_if_c
: if_c<Add, typename add_const<T>::type, T>
{};
template<class T>
struct remove_const
{ typedef T type; };
template<class T>
struct remove_const< const T>
{ typedef T type; };
template<typename T> struct remove_cv { typedef T type; };
template<typename T> struct remove_cv<const T> { typedef T type; };
template<typename T> struct remove_cv<const volatile T> { typedef T type; };
template<typename T> struct remove_cv<volatile T> { typedef T type; };
template<class T>
struct remove_cvref
: remove_cv<typename remove_reference<T>::type>
{
};
template <class T>
struct make_unsigned_impl { typedef T type; };
template <> struct make_unsigned_impl<signed char> { typedef unsigned char type; };
template <> struct make_unsigned_impl<signed short> { typedef unsigned short type; };
template <> struct make_unsigned_impl<signed int> { typedef unsigned int type; };
template <> struct make_unsigned_impl<signed long> { typedef unsigned long type; };
template <> struct make_unsigned_impl< ::boost::long_long_type > { typedef ::boost::ulong_long_type type; };
template <class T>
struct make_unsigned
: make_unsigned_impl<typename remove_cv<T>::type>
{};
template<class T> struct is_floating_point_cv { static const bool value = false; };
template<> struct is_floating_point_cv<float> { static const bool value = true; };
template<> struct is_floating_point_cv<double> { static const bool value = true; };
template<> struct is_floating_point_cv<long double> { static const bool value = true; };
template<class T>
struct is_floating_point
: is_floating_point_cv<typename remove_cv<T>::type>
{};
template<class T> struct is_integral_cv { static const bool value = false; };
template<> struct is_integral_cv< bool>{ static const bool value = true; };
template<> struct is_integral_cv< char>{ static const bool value = true; };
template<> struct is_integral_cv< unsigned char>{ static const bool value = true; };
template<> struct is_integral_cv< signed char>{ static const bool value = true; };
template<> struct is_integral_cv< char16_t>{ static const bool value = true; };
template<> struct is_integral_cv< char32_t>{ static const bool value = true; };
template<> struct is_integral_cv< wchar_t>{ static const bool value = true; };
template<> struct is_integral_cv< short>{ static const bool value = true; };
template<> struct is_integral_cv< unsigned short>{ static const bool value = true; };
template<> struct is_integral_cv< int>{ static const bool value = true; };
template<> struct is_integral_cv< unsigned int>{ static const bool value = true; };
template<> struct is_integral_cv< long>{ static const bool value = true; };
template<> struct is_integral_cv< unsigned long>{ static const bool value = true; };
template<> struct is_integral_cv< ::boost:: long_long_type>{ static const bool value = true; };
template<> struct is_integral_cv< ::boost::ulong_long_type>{ static const bool value = true; };
template<class T>
struct is_integral
: public is_integral_cv<typename remove_cv<T>::type>
{};
template <class T>
struct remove_all_extents
{ typedef T type;};
template <class T>
struct remove_all_extents<T[]>
{ typedef typename remove_all_extents<T>::type type; };
template <class T, std::size_t N>
struct remove_all_extents<T[N]>
{ typedef typename remove_all_extents<T>::type type;};
template<class T>
struct is_scalar
{ static const bool value = is_integral<T>::value || is_floating_point<T>::value; };
template<class T>
struct is_void_cv
{ static const bool value = false; };
template<>
struct is_void_cv<void>
{ static const bool value = true; };
template<class T>
struct is_void
: is_void_cv<typename remove_cv<T>::type>
{};
template<class T>
struct is_array
{ static const bool value = false; };
template<class T>
struct is_array<T[]>
{ static const bool value = true; };
template<class T, std::size_t N>
struct is_array<T[N]>
{ static const bool value = true; };
template <class T> struct is_member_pointer_cv { static const bool value = false; };
template <class T, class U>struct is_member_pointer_cv<T U::*> { static const bool value = true; };
template <class T>
struct is_member_pointer
: is_member_pointer_cv<typename remove_cv<T>::type>
{};
template <class T>
struct is_nullptr_t_cv
{ static const bool value = false; };
template <>
struct is_nullptr_t_cv
<decltype(nullptr)>
{ static const bool value = true; };
template <class T>
struct is_nullptr_t
: is_nullptr_t_cv<typename remove_cv<T>::type>
{};
# 742 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template <class T>
struct is_reference_convertible_to_pointer
{
struct twochar { char dummy[2]; };
template <class U> static char test(U*);
template <class U> static twochar test(...);
static T& source();
static const bool value = sizeof(char) == sizeof(test<T>(source()));
};
template < class T
, bool Filter = is_class_or_union<T>::value ||
is_void<T>::value ||
is_reference<T>::value ||
is_nullptr_t<T>::value >
struct is_function_impl
{ static const bool value = is_reference_convertible_to_pointer<T>::value; };
template <class T>
struct is_function_impl<T, true>
{ static const bool value = false; };
template <class T>
struct is_function
: is_function_impl<T>
{};
template<class T>
struct is_union_noextents_cv
{ static const bool value = __is_union(T); };
template<class T>
struct is_union
: is_union_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>
{};
template <class T>
struct is_class
{
static const bool value = is_class_or_union<T>::value && ! is_union<T>::value;
};
template <class T>
struct is_arithmetic
{
static const bool value = is_floating_point<T>::value ||
is_integral<T>::value;
};
template <class T>
struct is_member_function_pointer_cv
{
static const bool value = false;
};
template <class T, class C>
struct is_member_function_pointer_cv<T C::*>
: is_function<T>
{};
template <class T>
struct is_member_function_pointer
: is_member_function_pointer_cv<typename remove_cv<T>::type>
{};
# 844 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template <class T>
struct is_enum
{ static const bool value = __is_enum(T); };
template<class T>
struct is_pod_noextents_cv
{ static const bool value = (::boost::move_detail::is_scalar<T>::value || ::boost::move_detail::is_void<T>::value || __is_pod(T)); };
template<class T>
struct is_pod
: is_pod_noextents_cv<typename remove_cv<typename remove_all_extents<T>::type>::type>
{};
# 891 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template <class T>
struct is_empty
{ static const bool value = __is_empty(T); };
template<class T>
struct has_boost_move_no_copy_constructor_or_assign_type
{
template <class U>
static yes_type test(typename U::boost_move_no_copy_constructor_or_assign*);
template <class U>
static no_type test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
};
# 917 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template<class T>
struct is_copy_constructible
{
# 928 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template<class U> static typename add_reference<U>::type source();
static no_type test(...);
template <class U>
static yes_type test(U&, decltype(U(source<U>()))* = 0);
static const bool value = sizeof(test(source<T>())) == sizeof(yes_type);
};
# 953 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template <class T>
struct is_copy_assignable
{
# 965 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
typedef char yes_type;
struct no_type { char dummy[2]; };
template <class U> static typename add_reference<U>::type source();
template <class U> static decltype(source<U&>() = source<const U&>(), yes_type() ) test(int);
template <class> static no_type test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
};
template<class T>
struct is_trivially_destructible
{ static const bool value = __is_trivially_destructible(T) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_trivially_default_constructible
{ static const bool value = __is_trivially_constructible(T) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_trivially_copy_constructible
{
static const bool value = ::boost::move_detail::is_pod<T>::value || (::boost::move_detail::is_copy_constructible<T>::value && (__is_constructible(T, const T &) && __is_trivially_constructible(T, const T &)));
};
template<class T>
struct is_trivially_move_constructible
{ static const bool value = (__is_constructible(T, T&&) && __is_trivially_constructible(T, T&&)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_trivially_copy_assignable
{
static const bool value = ::boost::move_detail::is_pod<T>::value || ( ::boost::move_detail::is_copy_assignable<T>::value && (__is_assignable(T, const T &) && __is_trivially_assignable(T, const T &)));
};
template<class T>
struct is_trivially_move_assignable
{ static const bool value = (__is_assignable(T, T&&) && __is_trivially_assignable(T, T&&)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_default_constructible
{ static const bool value = __is_nothrow_constructible(T) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_copy_constructible
{ static const bool value = (__is_constructible(T, const T &) && __is_nothrow_constructible(T, const T &)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_move_constructible
{ static const bool value = (__is_constructible(T, T&&) && __is_nothrow_constructible(T, T&&)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_copy_assignable
{ static const bool value = (__is_assignable(T, const T &) && __is_nothrow_assignable(T, const T &)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_move_assignable
{ static const bool value = (__is_assignable(T, T&&) && __is_nothrow_assignable(T, T&&)) || ::boost::move_detail::is_pod<T>::value; };
template<class T>
struct is_nothrow_swappable
{
static const bool value = is_empty<T>::value || is_pod<T>::value;
};
template <typename T>
struct alignment_of_hack
{
T t1;
char c;
T t2;
alignment_of_hack();
~alignment_of_hack();
};
template <unsigned A, unsigned S>
struct alignment_logic
{ static const std::size_t value = A < S ? A : S; };
template< typename T >
struct alignment_of_impl
# 1097 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
{ static const std::size_t value = __alignof(T); };
template< typename T >
struct alignment_of
: alignment_of_impl<T>
{};
class alignment_dummy;
typedef void (*function_ptr)();
typedef int (alignment_dummy::*member_ptr);
struct alignment_struct
{ long double dummy[4]; };
union max_align
{
char char_;
short short_;
int int_;
long long_;
::boost::long_long_type long_long_;
float float_;
double double_;
void * void_ptr_;
long double long_double_[4];
alignment_dummy *unknown_class_ptr_;
function_ptr function_ptr_;
alignment_struct alignment_struct_;
};
typedef union max_align max_align_t;
# 1181 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template<std::size_t Len, std::size_t Align>
struct aligned_struct;
# 1193 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template<std::size_t Len>struct alignas(0x1) aligned_struct<Len, 0x1>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x2) aligned_struct<Len, 0x2>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x4) aligned_struct<Len, 0x4>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x8) aligned_struct<Len, 0x8>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x10) aligned_struct<Len, 0x10>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x20) aligned_struct<Len, 0x20>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x40) aligned_struct<Len, 0x40>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x80) aligned_struct<Len, 0x80>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x100) aligned_struct<Len, 0x100>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x200) aligned_struct<Len, 0x200>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x400) aligned_struct<Len, 0x400>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x800) aligned_struct<Len, 0x800>{ unsigned char data[Len];};
template<std::size_t Len>struct alignas(0x1000) aligned_struct<Len, 0x1000>{ unsigned char data[Len];};
template<std::size_t Len, std::size_t Align>
union aligned_struct_wrapper
{
typedef aligned_struct<Len, Align> aligner_t;
aligned_struct<Len, Align> aligner;
unsigned char data[Len > sizeof(aligner_t) ? Len : sizeof(aligner_t)];
};
template<std::size_t Len, std::size_t Align>
struct aligned_storage_impl
{
typedef aligned_struct_wrapper<Len, Align> type;
};
# 1276 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 3
template<std::size_t Len, std::size_t Align = alignment_of<max_align_t>::value>
struct aligned_storage
{
static_assert(Align > 0, "Align > 0");
typedef typename aligned_storage_impl<Len ? Len : 1, Align>::type type;
static const std::size_t value = alignment_of<type>::value;
static_assert(value >= Align, "value >= Align");
static_assert((value % Align) == 0, "(value % Align) == 0");
private:
aligned_storage();
};
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_end.hpp" 1 3
# 1298 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/type_traits.hpp" 2 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/mpl.hpp" 1 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/mpl.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/config_begin.hpp" 1 3
# 26 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/mpl.hpp" 2 3
namespace boost {
namespace intrusive {
namespace detail {
using boost::move_detail::is_same;
using boost::move_detail::add_const;
using boost::move_detail::remove_const;
using boost::move_detail::remove_cv;
using boost::move_detail::remove_reference;
using boost::move_detail::add_reference;
using boost::move_detail::remove_pointer;
using boost::move_detail::add_pointer;
using boost::move_detail::true_type;
using boost::move_detail::false_type;
using boost::move_detail::voider;
using boost::move_detail::enable_if_c;
using boost::move_detail::enable_if;
using boost::move_detail::disable_if_c;
using boost::move_detail::disable_if;
using boost::move_detail::is_convertible;
using boost::move_detail::if_c;
using boost::move_detail::if_;
using boost::move_detail::is_const;
using boost::move_detail::identity;
using boost::move_detail::alignment_of;
using boost::move_detail::is_empty;
using boost::move_detail::addressof;
using boost::move_detail::integral_constant;
using boost::move_detail::enable_if_convertible;
using boost::move_detail::disable_if_convertible;
using boost::move_detail::bool_;
using boost::move_detail::true_;
using boost::move_detail::false_;
using boost::move_detail::yes_type;
using boost::move_detail::no_type;
using boost::move_detail::apply;
using boost::move_detail::eval_if_c;
using boost::move_detail::eval_if;
using boost::move_detail::unvoid_ref;
using boost::move_detail::add_const_if_c;
template<std::size_t S>
struct ls_zeros
{
static const std::size_t value = (S & std::size_t(1)) ? 0 : (1 + ls_zeros<(S>>1u)>::value);
};
template<>
struct ls_zeros<0>
{
static const std::size_t value = 0;
};
template<>
struct ls_zeros<1>
{
static const std::size_t value = 0;
};
# 211 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/mpl.hpp" 3
}
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/config_end.hpp" 1 3
# 216 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/mpl.hpp" 2 3
# 28 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 2 3
namespace boost {
namespace container {
namespace dtl {
using boost::move_detail::integral_constant;
using boost::move_detail::true_type;
using boost::move_detail::false_type;
using boost::move_detail::enable_if_c;
using boost::move_detail::enable_if;
using boost::move_detail::enable_if_convertible;
using boost::move_detail::disable_if_c;
using boost::move_detail::disable_if;
using boost::move_detail::disable_if_convertible;
using boost::move_detail::is_convertible;
using boost::move_detail::if_c;
using boost::move_detail::if_;
using boost::move_detail::identity;
using boost::move_detail::bool_;
using boost::move_detail::true_;
using boost::move_detail::false_;
using boost::move_detail::yes_type;
using boost::move_detail::no_type;
using boost::move_detail::bool_;
using boost::move_detail::true_;
using boost::move_detail::false_;
using boost::move_detail::unvoid_ref;
using boost::move_detail::and_;
using boost::move_detail::or_;
using boost::move_detail::not_;
using boost::move_detail::enable_if_and;
using boost::move_detail::disable_if_and;
using boost::move_detail::enable_if_or;
using boost::move_detail::disable_if_or;
using boost::move_detail::remove_const;
template <class FirstType>
struct select1st
{
typedef FirstType type;
template<class T>
inline __attribute__ ((__always_inline__)) const type& operator()(const T& x) const
{ return x.first; }
template<class T>
inline __attribute__ ((__always_inline__)) type& operator()(T& x)
{ return const_cast<type&>(x.first); }
};
template<typename T>
struct void_t { typedef void type; };
template <class T, class=void>
struct is_transparent_base
{
static const bool value = false;
};
template <class T>
struct is_transparent_base<T, typename void_t<typename T::is_transparent>::type>
{
static const bool value = true;
};
template <class T>
struct is_transparent
: is_transparent_base<T>
{};
template <typename C, class , typename R>
struct enable_if_transparent
: boost::move_detail::enable_if_c<dtl::is_transparent<C>::value, R>
{};
template<typename...> using variadic_void_t = void;
template<typename Allocator, typename = void>
struct is_allocator
{
static const bool value = false;
};
template <typename T>
T&& ctad_declval();
template<typename Allocator>
struct is_allocator < Allocator,
variadic_void_t< typename Allocator::value_type
, decltype(ctad_declval<Allocator&>().allocate(size_t{})) >>
{
static const bool value = true;
};
template<class T>
using require_allocator_t = typename enable_if_c<is_allocator<T>::value, T>::type;
template<class T>
using require_nonallocator_t = typename enable_if_c<!is_allocator<T>::value, T>::type;
}
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 142 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/mpl.hpp" 2 3
# 33 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/type_traits.hpp" 1 3
# 29 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/type_traits.hpp" 3
namespace boost {
namespace container {
namespace dtl {
using ::boost::move_detail::enable_if;
using ::boost::move_detail::enable_if_and;
using ::boost::move_detail::is_same;
using ::boost::move_detail::is_different;
using ::boost::move_detail::is_pointer;
using ::boost::move_detail::add_reference;
using ::boost::move_detail::add_const;
using ::boost::move_detail::add_const_reference;
using ::boost::move_detail::remove_const;
using ::boost::move_detail::remove_reference;
using ::boost::move_detail::remove_cvref;
using ::boost::move_detail::make_unsigned;
using ::boost::move_detail::is_floating_point;
using ::boost::move_detail::is_integral;
using ::boost::move_detail::is_enum;
using ::boost::move_detail::is_pod;
using ::boost::move_detail::is_empty;
using ::boost::move_detail::is_trivially_destructible;
using ::boost::move_detail::is_trivially_default_constructible;
using ::boost::move_detail::is_trivially_copy_constructible;
using ::boost::move_detail::is_trivially_move_constructible;
using ::boost::move_detail::is_trivially_copy_assignable;
using ::boost::move_detail::is_trivially_move_assignable;
using ::boost::move_detail::is_nothrow_default_constructible;
using ::boost::move_detail::is_nothrow_copy_constructible;
using ::boost::move_detail::is_nothrow_move_constructible;
using ::boost::move_detail::is_nothrow_copy_assignable;
using ::boost::move_detail::is_nothrow_move_assignable;
using ::boost::move_detail::is_nothrow_swappable;
using ::boost::move_detail::alignment_of;
using ::boost::move_detail::aligned_storage;
using ::boost::move_detail::nat;
using ::boost::move_detail::nat2;
using ::boost::move_detail::nat3;
using ::boost::move_detail::natN;
using ::boost::move_detail::max_align_t;
using ::boost::move_detail::is_convertible;
}
}
}
# 34 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/placement_new.hpp" 1 3
# 15 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/placement_new.hpp" 3
struct boost_container_new_t{};
inline void *operator new(std::size_t, void *p, boost_container_new_t)
{ return p; }
inline void operator delete(void *, void *, boost_container_new_t)
{}
# 35 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 1 3
# 20 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/config_begin.hpp" 1 3
# 21 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/workaround.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_rebind.hpp" 1 3
# 26 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_rebind.hpp" 3
namespace boost {
namespace intrusive {
template <typename Ptr, typename U>
struct pointer_has_rebind
{
template <typename V> struct any
{ any(const V&) { } };
template <typename X>
static char test(int, typename X::template rebind<U>*);
template <typename X>
static int test(any<int>, void*);
static const bool value = (1 == sizeof(test<Ptr>(0, 0)));
};
template <typename Ptr, typename U>
struct pointer_has_rebind_other
{
template <typename V> struct any
{ any(const V&) { } };
template <typename X>
static char test(int, typename X::template rebind<U>::other*);
template <typename X>
static int test(any<int>, void*);
static const bool value = (1 == sizeof(test<Ptr>(0, 0)));
};
template <typename Ptr, typename U>
struct pointer_rebind_mode
{
static const unsigned int rebind = (unsigned int)pointer_has_rebind<Ptr, U>::value;
static const unsigned int rebind_other = (unsigned int)pointer_has_rebind_other<Ptr, U>::value;
static const unsigned int mode = rebind + rebind*rebind_other;
};
template <typename Ptr, typename U, unsigned int RebindMode>
struct pointer_rebinder;
template <typename Ptr, typename U>
struct pointer_rebinder< Ptr, U, 2u >
{
typedef typename Ptr::template rebind<U>::other type;
};
template <typename Ptr, typename U>
struct pointer_rebinder< Ptr, U, 1u >
{
typedef typename Ptr::template rebind<U> type;
};
# 99 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_rebind.hpp" 3
template <template <class, class...> class Ptr, typename A, class... An, class U>
struct pointer_rebinder<Ptr<A, An...>, U, 0u >
{
typedef Ptr<U, An...> type;
};
template <template <class> class Ptr, typename A, class U>
struct pointer_rebinder<Ptr<A>, U, 0u >
{
typedef Ptr<U> type;
};
# 176 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_rebind.hpp" 3
template <typename Ptr, typename U>
struct pointer_rebind
: public pointer_rebinder<Ptr, U, pointer_rebind_mode<Ptr, U>::mode>
{};
template <typename T, typename U>
struct pointer_rebind<T*, U>
{ typedef U* type; };
}
}
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/pointer_element.hpp" 1 3
# 26 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/pointer_element.hpp" 3
namespace boost {
namespace movelib {
namespace detail{
template <typename T> struct first_param
{ typedef void type; };
template <template <typename, typename...> class TemplateClass, typename T, typename... Args>
struct first_param< TemplateClass<T, Args...> >
{
typedef T type;
};
# 129 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/pointer_element.hpp" 3
template <typename T>
struct has_internal_pointer_element
{
template <typename X>
static char test(int, typename X::element_type*);
template <typename X>
static int test(...);
static const bool value = (1 == sizeof(test<T>(0, 0)));
};
template<class Ptr, bool = has_internal_pointer_element<Ptr>::value>
struct pointer_element_impl
{
typedef typename Ptr::element_type type;
};
template<class Ptr>
struct pointer_element_impl<Ptr, false>
{
typedef typename boost::movelib::detail::first_param<Ptr>::type type;
};
}
template <typename Ptr>
struct pointer_element
{
typedef typename ::boost::movelib::detail::pointer_element_impl<Ptr>::type type;
};
template <typename T>
struct pointer_element<T*>
{ typedef T type; };
}
}
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 2 3
namespace boost {
namespace intrusive {
namespace detail {
template <typename U, typename Signature> class has_member_function_callable_with_pointer_to { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::pointer_to>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
template <typename U, typename Signature> class has_member_function_callable_with_dynamic_cast_from { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::dynamic_cast_from>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
template <typename U, typename Signature> class has_member_function_callable_with_static_cast_from { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::static_cast_from>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
template <typename U, typename Signature> class has_member_function_callable_with_const_cast_from { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::const_cast_from>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
template <typename T, typename DefaultType> struct boost_intrusive_eval_default_type_element_type { template <typename X> static char test(int, typename X::element_type*); template <typename X> static int test(...); struct DefaultWrap { typedef typename DefaultType::type element_type; }; static const bool value = (1 == sizeof(test<T>(0, 0))); typedef typename ::boost::intrusive::detail::eval_if_c < value , ::boost::intrusive::detail::identity<T> , ::boost::intrusive::detail::identity<DefaultWrap> >::type::element_type type; };
template <typename T> struct boost_intrusive_has_type_difference_type { template <typename X> static char test(int, typename X::difference_type*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_difference_type { struct DefaultWrap { typedef DefaultType difference_type; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_difference_type<T>::value , T, DefaultWrap>::type::difference_type type; };
template <typename T> struct boost_intrusive_has_type_size_type { template <typename X> static char test(int, typename X::size_type*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_size_type { struct DefaultWrap { typedef DefaultType size_type; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_size_type<T>::value , T, DefaultWrap>::type::size_type type; };
template <typename T> struct boost_intrusive_has_type_reference { template <typename X> static char test(int, typename X::reference*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_reference { struct DefaultWrap { typedef DefaultType reference; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_reference<T>::value , T, DefaultWrap>::type::reference type; };
template <typename T> struct boost_intrusive_has_type_value_traits_ptr { template <typename X> static char test(int, typename X::value_traits_ptr*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_value_traits_ptr { struct DefaultWrap { typedef DefaultType value_traits_ptr; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_value_traits_ptr<T>::value , T, DefaultWrap>::type::value_traits_ptr type; };
}
# 68 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
template <typename Ptr>
struct pointer_traits
{
# 97 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
typedef Ptr pointer;
typedef typename boost::intrusive::detail:: boost_intrusive_eval_default_type_element_type< Ptr, boost::movelib::detail::first_param<Ptr> >::type element_type;
typedef typename boost::intrusive::detail:: boost_intrusive_default_type_difference_type< Ptr, std::ptrdiff_t >::type difference_type;
typedef typename boost::intrusive::detail:: boost_intrusive_default_type_size_type< Ptr, typename boost::move_detail:: make_unsigned<difference_type>::type >::type size_type;
typedef typename boost::intrusive::detail:: boost_intrusive_default_type_reference< Ptr, typename boost::intrusive::detail::unvoid_ref<element_type>::type >::type reference;
template <class U> struct rebind_pointer
{
typedef typename boost::intrusive::pointer_rebind<Ptr, U>::type type;
};
template <class U> using rebind = typename boost::intrusive::pointer_rebind<Ptr, U>::type;
# 133 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
inline __attribute__ ((__always_inline__)) static pointer pointer_to(reference r) noexcept
{
const bool value = boost::intrusive::detail::
has_member_function_callable_with_pointer_to
<Ptr, Ptr (*)(reference)>::value;
boost::intrusive::detail::bool_<value> flag;
return pointer_traits::priv_pointer_to(flag, r);
}
# 152 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer static_cast_from(const UPtr &uptr) noexcept
{
typedef const UPtr &RefArg;
const bool value = boost::intrusive::detail::
has_member_function_callable_with_static_cast_from
<pointer, pointer(*)(RefArg)>::value
|| boost::intrusive::detail::
has_member_function_callable_with_static_cast_from
<pointer, pointer(*)(UPtr)>::value;
return pointer_traits::priv_static_cast_from(boost::intrusive::detail::bool_<value>(), uptr);
}
# 173 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer const_cast_from(const UPtr &uptr) noexcept
{
typedef const UPtr &RefArg;
const bool value = boost::intrusive::detail::
has_member_function_callable_with_const_cast_from
<pointer, pointer(*)(RefArg)>::value
|| boost::intrusive::detail::
has_member_function_callable_with_const_cast_from
<pointer, pointer(*)(UPtr)>::value;
return pointer_traits::priv_const_cast_from(boost::intrusive::detail::bool_<value>(), uptr);
}
# 194 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer dynamic_cast_from(const UPtr &uptr) noexcept
{
typedef const UPtr &RefArg;
const bool value = boost::intrusive::detail::
has_member_function_callable_with_dynamic_cast_from
<pointer, pointer(*)(RefArg)>::value
|| boost::intrusive::detail::
has_member_function_callable_with_dynamic_cast_from
<pointer, pointer(*)(UPtr)>::value;
return pointer_traits::priv_dynamic_cast_from(boost::intrusive::detail::bool_<value>(), uptr);
}
private:
template <class T>
inline __attribute__ ((__always_inline__)) static T* to_raw_pointer(T* p) noexcept
{ return p; }
template <class Pointer>
inline __attribute__ ((__always_inline__)) static typename pointer_traits<Pointer>::element_type*
to_raw_pointer(const Pointer &p) noexcept
{ return pointer_traits::to_raw_pointer(p.operator->()); }
inline __attribute__ ((__always_inline__)) static pointer priv_pointer_to(boost::intrusive::detail::true_, reference r) noexcept
{ return Ptr::pointer_to(r); }
inline __attribute__ ((__always_inline__)) static pointer priv_pointer_to(boost::intrusive::detail::false_, reference r) noexcept
{ return pointer(boost::intrusive::detail::addressof(r)); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_static_cast_from(boost::intrusive::detail::true_, const UPtr &uptr) noexcept
{ return Ptr::static_cast_from(uptr); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_static_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) noexcept
{ return uptr ? pointer_to(*static_cast<element_type*>(to_raw_pointer(uptr))) : pointer(); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_const_cast_from(boost::intrusive::detail::true_, const UPtr &uptr) noexcept
{ return Ptr::const_cast_from(uptr); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_const_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) noexcept
{ return uptr ? pointer_to(const_cast<element_type&>(*uptr)) : pointer(); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_dynamic_cast_from(boost::intrusive::detail::true_, const UPtr &uptr) noexcept
{ return Ptr::dynamic_cast_from(uptr); }
template<class UPtr>
inline __attribute__ ((__always_inline__)) static pointer priv_dynamic_cast_from(boost::intrusive::detail::false_, const UPtr &uptr) noexcept
{ return uptr ? pointer_to(dynamic_cast<element_type&>(*uptr)) : pointer(); }
};
template <typename Ptr>
struct pointer_traits<const Ptr> : pointer_traits<Ptr> {};
template <typename Ptr>
struct pointer_traits<volatile Ptr> : pointer_traits<Ptr> { };
template <typename Ptr>
struct pointer_traits<const volatile Ptr> : pointer_traits<Ptr> { };
template <typename Ptr>
struct pointer_traits<Ptr&> : pointer_traits<Ptr> { };
template <typename T>
struct pointer_traits<T*>
{
typedef T element_type;
typedef T* pointer;
typedef std::ptrdiff_t difference_type;
typedef std::size_t size_type;
# 288 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 3
typedef typename boost::intrusive::detail::unvoid_ref<element_type>::type reference;
template <class U> using rebind = U*;
template <class U> struct rebind_pointer
{ typedef U* type; };
inline __attribute__ ((__always_inline__)) static pointer pointer_to(reference r) noexcept
{ return boost::intrusive::detail::addressof(r); }
template<class U>
inline __attribute__ ((__always_inline__)) static pointer static_cast_from(U *uptr) noexcept
{ return static_cast<pointer>(uptr); }
template<class U>
inline __attribute__ ((__always_inline__)) static pointer const_cast_from(U *uptr) noexcept
{ return const_cast<pointer>(uptr); }
template<class U>
inline __attribute__ ((__always_inline__)) static pointer dynamic_cast_from(U *uptr) noexcept
{ return dynamic_cast<pointer>(uptr); }
};
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/config_end.hpp" 1 3
# 325 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/pointer_traits.hpp" 2 3
# 40 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 1 3
# 28 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_begin.hpp" 1 3
# 29 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 1 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_begin.hpp" 1 3
# 28 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 2 3
# 320 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 3
namespace boost {
template<class T>
struct has_move_emulation_enabled
{
static const bool value = false;
};
template<class T>
struct has_move_emulation_disabled
{
static const bool value = true;
};
}
# 504 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 3
namespace boost {
namespace move_detail {
template< class T> struct forward_type { typedef T type; };
}}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_end.hpp" 1 3
# 514 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/core.hpp" 2 3
# 31 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 2 3
# 173 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
namespace boost {
template<class T>
struct enable_move_utility_emulation
{
static const bool value = false;
};
# 210 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
template <class T>
inline __attribute__ ((__always_inline__))
typename ::boost::move_detail::remove_reference<T>::type && move(T&& t) noexcept
{ return static_cast<typename ::boost::move_detail::remove_reference<T>::type &&>(t); }
# 247 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
template <class T>
inline __attribute__ ((__always_inline__))
T&& forward(typename ::boost::move_detail::remove_reference<T>::type& t) noexcept
{ return static_cast<T&&>(t); }
template <class T>
inline __attribute__ ((__always_inline__))
T&& forward(typename ::boost::move_detail::remove_reference<T>::type&& t) noexcept
{
static_assert(!boost::move_detail::is_lvalue_reference<T>::value, "!boost::move_detail::is_lvalue_reference<T>::value");
return static_cast<T&&>(t);
}
}
# 273 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
namespace boost {
# 289 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 3
template <class T>
inline __attribute__ ((__always_inline__)) T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type& t) noexcept
{ return static_cast<T&&>(t); }
template <class T>
inline __attribute__ ((__always_inline__)) T&& move_if_not_lvalue_reference(typename ::boost::move_detail::remove_reference<T>::type&& t) noexcept
{
static_assert(!boost::move_detail::is_lvalue_reference<T>::value, "!boost::move_detail::is_lvalue_reference<T>::value");
return static_cast<T&&>(t);
}
}
namespace boost{
namespace move_detail{
template <typename T>
typename boost::move_detail::add_rvalue_reference<T>::type declval();
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/config_end.hpp" 1 3
# 322 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/utility_core.hpp" 2 3
# 43 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/static_assert.hpp" 1 3
# 18 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/static_assert.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/detail/workaround.hpp" 1 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/config/workaround.hpp" 1 3
# 9 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/detail/workaround.hpp" 2 3
# 19 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/static_assert.hpp" 2 3
# 49 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 62 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 1 3
# 32 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/fwd_macros.hpp" 1 3
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/detail/fwd_macros.hpp" 3
namespace boost {
namespace move_detail {
template <typename T> struct unvoid { typedef T type; };
template <> struct unvoid<void> { struct type { }; };
template <> struct unvoid<const void> { struct type { }; };
}
}
# 33 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 2 3
namespace boost_intrusive_hmfcw {
typedef char yes_type;
struct no_type{ char dummy[2]; };
struct dont_care
{
dont_care(...);
};
# 77 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
}
# 111 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
namespace boost { namespace container { namespace dtl {
template<typename Fun, class ...Args>
struct has_member_function_callable_with_allocate
{
template<class U>
static decltype(boost::move_detail::declval<U>().
allocate(::boost::move_detail::declval<Args>()...)
, boost_intrusive_hmfcw::yes_type()) Test(U* f);
template<class U>
static boost_intrusive_hmfcw::no_type Test(...);
static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(boost_intrusive_hmfcw::yes_type);
};
# 356 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
}}}
# 63 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 1 3
# 111 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
namespace boost { namespace container { namespace dtl {
template<typename Fun, class ...Args>
struct has_member_function_callable_with_destroy
{
template<class U>
static decltype(boost::move_detail::declval<U>().
destroy(::boost::move_detail::declval<Args>()...)
, boost_intrusive_hmfcw::yes_type()) Test(U* f);
template<class U>
static boost_intrusive_hmfcw::no_type Test(...);
static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(boost_intrusive_hmfcw::yes_type);
};
# 356 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
}}}
# 70 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 1 3
# 111 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
namespace boost { namespace container { namespace dtl {
template<typename Fun, class ...Args>
struct has_member_function_callable_with_construct
{
template<class U>
static decltype(boost::move_detail::declval<U>().
construct(::boost::move_detail::declval<Args>()...)
, boost_intrusive_hmfcw::yes_type()) Test(U* f);
template<class U>
static boost_intrusive_hmfcw::no_type Test(...);
static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(boost_intrusive_hmfcw::yes_type);
};
# 356 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/intrusive/detail/has_member_function_callable_with.hpp" 3
}}}
# 77 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
namespace boost {
namespace container {
template<class T, class VoidAllocator, class Options>
class small_vector_allocator;
namespace allocator_traits_detail {
template <typename U, typename Signature> class has_max_size { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::max_size>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
template <typename U, typename Signature> class has_select_on_container_copy_construction { private: template<Signature> struct helper; template<typename T> static ::boost::intrusive::detail::yes_type test(helper<&T::select_on_container_copy_construction>*); template<typename T> static ::boost::intrusive::detail::no_type test(...); public: static const bool value = sizeof(test<U>(0)) == sizeof(::boost::intrusive::detail::yes_type); };
}
namespace dtl {
template<class Allocator>
struct is_std_allocator
{ static const bool value = false; };
template<class T>
struct is_std_allocator< std::allocator<T> >
{ static const bool value = true; };
template<class T, class Options>
struct is_std_allocator< small_vector_allocator<T, std::allocator<T>, Options > >
{ static const bool value = true; };
template<class Allocator>
struct is_not_std_allocator
{ static const bool value = !is_std_allocator<Allocator>::value; };
template <typename T> struct boost_intrusive_has_type_pointer { template <typename X> static char test(int, typename X::pointer*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_pointer { struct DefaultWrap { typedef DefaultType pointer; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_pointer<T>::value , T, DefaultWrap>::type::pointer type; };
template <typename T, typename DefaultType> struct boost_intrusive_eval_default_type_const_pointer { template <typename X> static char test(int, typename X::const_pointer*); template <typename X> static int test(...); struct DefaultWrap { typedef typename DefaultType::type const_pointer; }; static const bool value = (1 == sizeof(test<T>(0, 0))); typedef typename ::boost::intrusive::detail::eval_if_c < value , ::boost::intrusive::detail::identity<T> , ::boost::intrusive::detail::identity<DefaultWrap> >::type::const_pointer type; };
template <typename T> struct boost_intrusive_has_type_reference { template <typename X> static char test(int, typename X::reference*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_reference { struct DefaultWrap { typedef DefaultType reference; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_reference<T>::value , T, DefaultWrap>::type::reference type; };
template <typename T> struct boost_intrusive_has_type_const_reference { template <typename X> static char test(int, typename X::const_reference*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_const_reference { struct DefaultWrap { typedef DefaultType const_reference; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_const_reference<T>::value , T, DefaultWrap>::type::const_reference type; };
template <typename T, typename DefaultType> struct boost_intrusive_eval_default_type_void_pointer { template <typename X> static char test(int, typename X::void_pointer*); template <typename X> static int test(...); struct DefaultWrap { typedef typename DefaultType::type void_pointer; }; static const bool value = (1 == sizeof(test<T>(0, 0))); typedef typename ::boost::intrusive::detail::eval_if_c < value , ::boost::intrusive::detail::identity<T> , ::boost::intrusive::detail::identity<DefaultWrap> >::type::void_pointer type; };
template <typename T, typename DefaultType> struct boost_intrusive_eval_default_type_const_void_pointer { template <typename X> static char test(int, typename X::const_void_pointer*); template <typename X> static int test(...); struct DefaultWrap { typedef typename DefaultType::type const_void_pointer; }; static const bool value = (1 == sizeof(test<T>(0, 0))); typedef typename ::boost::intrusive::detail::eval_if_c < value , ::boost::intrusive::detail::identity<T> , ::boost::intrusive::detail::identity<DefaultWrap> >::type::const_void_pointer type; };
template <typename T> struct boost_intrusive_has_type_size_type { template <typename X> static char test(int, typename X::size_type*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_size_type { struct DefaultWrap { typedef DefaultType size_type; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_size_type<T>::value , T, DefaultWrap>::type::size_type type; };
template <typename T> struct boost_intrusive_has_type_propagate_on_container_copy_assignment { template <typename X> static char test(int, typename X::propagate_on_container_copy_assignment*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_propagate_on_container_copy_assignment { struct DefaultWrap { typedef DefaultType propagate_on_container_copy_assignment; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_propagate_on_container_copy_assignment<T>::value , T, DefaultWrap>::type::propagate_on_container_copy_assignment type; };
template <typename T> struct boost_intrusive_has_type_propagate_on_container_move_assignment { template <typename X> static char test(int, typename X::propagate_on_container_move_assignment*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_propagate_on_container_move_assignment { struct DefaultWrap { typedef DefaultType propagate_on_container_move_assignment; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_propagate_on_container_move_assignment<T>::value , T, DefaultWrap>::type::propagate_on_container_move_assignment type; };
template <typename T> struct boost_intrusive_has_type_propagate_on_container_swap { template <typename X> static char test(int, typename X::propagate_on_container_swap*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_propagate_on_container_swap { struct DefaultWrap { typedef DefaultType propagate_on_container_swap; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_propagate_on_container_swap<T>::value , T, DefaultWrap>::type::propagate_on_container_swap type; };
template <typename T> struct boost_intrusive_has_type_is_always_equal { template <typename X> static char test(int, typename X::is_always_equal*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_is_always_equal { struct DefaultWrap { typedef DefaultType is_always_equal; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_is_always_equal<T>::value , T, DefaultWrap>::type::is_always_equal type; };
template <typename T> struct boost_intrusive_has_type_difference_type { template <typename X> static char test(int, typename X::difference_type*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_difference_type { struct DefaultWrap { typedef DefaultType difference_type; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_difference_type<T>::value , T, DefaultWrap>::type::difference_type type; };
template <typename T> struct boost_intrusive_has_type_is_partially_propagable { template <typename X> static char test(int, typename X::is_partially_propagable*); template <typename X> static int test(...); static const bool value = (1 == sizeof(test<T>(0, 0))); }; template <typename T, typename DefaultType> struct boost_intrusive_default_type_is_partially_propagable { struct DefaultWrap { typedef DefaultType is_partially_propagable; }; typedef typename ::boost::intrusive::detail::if_c < boost_intrusive_has_type_is_partially_propagable<T>::value , T, DefaultWrap>::type::is_partially_propagable type; };
}
template <typename Allocator>
struct allocator_traits
{
typedef Allocator allocator_type;
typedef typename allocator_type::value_type value_type;
# 208 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 3
typedef typename boost::container::dtl:: boost_intrusive_default_type_pointer< Allocator, value_type* >::type
pointer;
typedef typename boost::container::dtl:: boost_intrusive_eval_default_type_const_pointer< Allocator, typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<const value_type> >::type
const_pointer;
typedef typename boost::container::dtl:: boost_intrusive_default_type_reference< Allocator, typename dtl::unvoid_ref<value_type>::type >::type
reference;
typedef typename boost::container::dtl:: boost_intrusive_default_type_const_reference< Allocator, typename dtl::unvoid_ref<const value_type>::type >::type
const_reference;
typedef typename boost::container::dtl:: boost_intrusive_eval_default_type_void_pointer< Allocator, typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<void> >::type
void_pointer;
typedef typename boost::container::dtl:: boost_intrusive_eval_default_type_const_void_pointer< Allocator, typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<const void> >::type
const_void_pointer;
typedef typename boost::container::dtl:: boost_intrusive_default_type_difference_type< Allocator, std::ptrdiff_t >::type
difference_type;
typedef typename boost::container::dtl:: boost_intrusive_default_type_size_type< Allocator, std::size_t >::type
size_type;
typedef typename boost::container::dtl:: boost_intrusive_default_type_propagate_on_container_copy_assignment< Allocator, dtl::false_type >::type
propagate_on_container_copy_assignment;
typedef typename boost::container::dtl:: boost_intrusive_default_type_propagate_on_container_move_assignment< Allocator, dtl::false_type >::type
propagate_on_container_move_assignment;
typedef typename boost::container::dtl:: boost_intrusive_default_type_propagate_on_container_swap< Allocator, dtl::false_type >::type
propagate_on_container_swap;
typedef typename boost::container::dtl:: boost_intrusive_default_type_is_always_equal< Allocator, dtl::is_empty<Allocator> >::type
is_always_equal;
typedef typename boost::container::dtl:: boost_intrusive_default_type_is_partially_propagable< Allocator, dtl::false_type >::type
is_partially_propagable;
template <typename T> using rebind_alloc = typename boost::intrusive::pointer_rebind<Allocator, T>::type;
template <typename T> using rebind_traits = allocator_traits< rebind_alloc<T> >;
# 294 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 3
template <class T>
struct portable_rebind_alloc
{ typedef typename boost::intrusive::pointer_rebind<Allocator, T>::type type; };
inline __attribute__ ((__always_inline__)) static pointer allocate(Allocator &a, size_type n)
{ return a.allocate(n); }
inline __attribute__ ((__always_inline__)) static void deallocate(Allocator &a, pointer p, size_type n)
{ a.deallocate(p, n); }
inline __attribute__ ((__always_inline__)) static pointer allocate(Allocator &a, size_type n, const_void_pointer p)
{
const bool value = boost::container::dtl::
has_member_function_callable_with_allocate
<Allocator, const size_type, const const_void_pointer>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_allocate(flag, a, n, p);
}
template<class T>
inline __attribute__ ((__always_inline__)) static void destroy(Allocator &a, T*p) noexcept
{
typedef T* destroy_pointer;
const bool value = boost::container::dtl::
has_member_function_callable_with_destroy
<Allocator, const destroy_pointer>::value;
dtl::bool_<value> flag;
allocator_traits::priv_destroy(flag, a, p);
}
inline __attribute__ ((__always_inline__)) static size_type max_size(const Allocator &a) noexcept
{
const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_max_size(flag, a);
}
inline __attribute__ ((__always_inline__)) static typename dtl::if_c < allocator_traits_detail::has_select_on_container_copy_construction<Allocator , Allocator (Allocator::*)() const>::value , Allocator , const Allocator & >::type
select_on_container_copy_construction(const Allocator &a)
{
const bool value = allocator_traits_detail::has_select_on_container_copy_construction
<Allocator, Allocator (Allocator::*)() const>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_select_on_container_copy_construction(flag, a);
}
template <class T, class ...Args>
inline __attribute__ ((__always_inline__)) static void construct(Allocator & a, T* p, Args &&... args)
{
static const bool value = ::boost::move_detail::and_
< dtl::is_not_std_allocator<Allocator>
, boost::container::dtl::has_member_function_callable_with_construct
< Allocator, T*, Args... >
>::value;
dtl::bool_<value> flag;
allocator_traits::priv_construct(flag, a, p, ::boost::forward<Args>(args)...);
}
inline __attribute__ ((__always_inline__)) static bool storage_is_unpropagable(const Allocator &a, pointer p) noexcept
{
dtl::bool_<is_partially_propagable::value> flag;
return allocator_traits::priv_storage_is_unpropagable(flag, a, p);
}
inline __attribute__ ((__always_inline__)) static bool equal(const Allocator &a, const Allocator &b) noexcept
{
dtl::bool_<is_always_equal::value> flag;
return allocator_traits::priv_equal(flag, a, b);
}
private:
inline __attribute__ ((__always_inline__)) static pointer priv_allocate(dtl::true_type, Allocator &a, size_type n, const_void_pointer p)
{ return a.allocate(n, p); }
inline __attribute__ ((__always_inline__)) static pointer priv_allocate(dtl::false_type, Allocator &a, size_type n, const_void_pointer)
{ return a.allocate(n); }
template<class T>
inline __attribute__ ((__always_inline__)) static void priv_destroy(dtl::true_type, Allocator &a, T* p) noexcept
{ a.destroy(p); }
template<class T>
inline __attribute__ ((__always_inline__)) static void priv_destroy(dtl::false_type, Allocator &, T* p) noexcept
{ p->~T(); (void)p; }
inline __attribute__ ((__always_inline__)) static size_type priv_max_size(dtl::true_type, const Allocator &a) noexcept
{ return a.max_size(); }
inline __attribute__ ((__always_inline__)) static size_type priv_max_size(dtl::false_type, const Allocator &) noexcept
{ return size_type(-1)/sizeof(value_type); }
inline __attribute__ ((__always_inline__)) static Allocator priv_select_on_container_copy_construction(dtl::true_type, const Allocator &a)
{ return a.select_on_container_copy_construction(); }
inline __attribute__ ((__always_inline__)) static const Allocator &priv_select_on_container_copy_construction(dtl::false_type, const Allocator &a) noexcept
{ return a; }
template<class T, class ...Args>
inline __attribute__ ((__always_inline__)) static void priv_construct(dtl::true_type, Allocator &a, T *p, Args && ...args)
{ a.construct( p, ::boost::forward<Args>(args)...); }
template<class T, class ...Args>
inline __attribute__ ((__always_inline__)) static void priv_construct(dtl::false_type, Allocator &, T *p, Args && ...args)
{ ::new((void*)p, boost_container_new_t()) T(::boost::forward<Args>(args)...); }
# 462 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 3
template<class T>
inline __attribute__ ((__always_inline__)) static void priv_construct(dtl::false_type, Allocator &, T *p, const ::boost::container::default_init_t&)
{ ::new((void*)p, boost_container_new_t()) T; }
inline __attribute__ ((__always_inline__)) static bool priv_storage_is_unpropagable(dtl::true_type, const Allocator &a, pointer p)
{ return a.storage_is_unpropagable(p); }
inline __attribute__ ((__always_inline__)) static bool priv_storage_is_unpropagable(dtl::false_type, const Allocator &, pointer)
{ return false; }
inline __attribute__ ((__always_inline__)) static bool priv_equal(dtl::true_type, const Allocator &, const Allocator &)
{ return true; }
inline __attribute__ ((__always_inline__)) static bool priv_equal(dtl::false_type, const Allocator &a, const Allocator &b)
{ return a == b; }
};
template<class T, class AllocatorOrVoid>
struct real_allocator
{
typedef AllocatorOrVoid type;
};
template<class T>
struct real_allocator<T, void>
{
typedef new_allocator<T> type;
};
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 501 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/allocator_traits.hpp" 2 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/new_allocator.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/new_allocator.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/new_allocator.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception.h" 1 3
# 35 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception.h" 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
# 59 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception.h" 3
class exception
{
public:
exception() noexcept { }
virtual ~exception() noexcept;
exception(const exception&) = default;
exception& operator=(const exception&) = default;
exception(exception&&) = default;
exception& operator=(exception&&) = default;
virtual const char*
what() const noexcept;
};
}
}
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 40 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 2 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
# 54 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 3
class bad_exception : public exception
{
public:
bad_exception() noexcept { }
virtual ~bad_exception() noexcept;
virtual const char*
what() const noexcept;
};
typedef void (*terminate_handler) ();
terminate_handler set_terminate(terminate_handler) noexcept;
terminate_handler get_terminate() noexcept;
void terminate() noexcept __attribute__ ((__noreturn__,__cold__));
typedef void (*__attribute__ ((__deprecated__)) unexpected_handler) ();
__attribute__ ((__deprecated__))
unexpected_handler set_unexpected(unexpected_handler) noexcept;
__attribute__ ((__deprecated__))
unexpected_handler get_unexpected() noexcept;
__attribute__ ((__deprecated__))
void unexpected() __attribute__ ((__noreturn__,__cold__));
# 124 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 3
__attribute__ ((__deprecated__ ("use '" "std::uncaught_exceptions()" "' instead")))
bool uncaught_exception() noexcept __attribute__ ((__pure__));
int uncaught_exceptions() noexcept __attribute__ ((__pure__));
}
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 158 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 3
void __verbose_terminate_handler();
}
}
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 1 3
# 35 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_defines.h" 1 3
# 36 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cxxabi_init_exception.h" 1 3
# 35 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cxxabi_init_exception.h" 3
#pragma GCC visibility push(default)
# 1 "/usr/lib/clang/18/include/stddef.h" 1 3
# 72 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_ptrdiff_t.h" 1 3
# 18 "/usr/lib/clang/18/include/__stddef_ptrdiff_t.h" 3
typedef long int ptrdiff_t;
# 73 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_size_t.h" 1 3
# 18 "/usr/lib/clang/18/include/__stddef_size_t.h" 3
typedef long unsigned int size_t;
# 78 "/usr/lib/clang/18/include/stddef.h" 2 3
# 87 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_wchar_t.h" 1 3
# 88 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_null.h" 1 3
# 93 "/usr/lib/clang/18/include/stddef.h" 2 3
# 1 "/usr/lib/clang/18/include/__stddef_nullptr_t.h" 1 3
# 98 "/usr/lib/clang/18/include/stddef.h" 2 3
# 112 "/usr/lib/clang/18/include/stddef.h" 3
# 1 "/usr/lib/clang/18/include/__stddef_offsetof.h" 1 3
# 113 "/usr/lib/clang/18/include/stddef.h" 2 3
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cxxabi_init_exception.h" 2 3
# 50 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cxxabi_init_exception.h" 3
namespace std
{
class type_info;
}
namespace __cxxabiv1
{
struct __cxa_refcounted_exception;
extern "C"
{
void*
__cxa_allocate_exception(size_t) noexcept;
void
__cxa_free_exception(void*) noexcept;
__cxa_refcounted_exception*
__cxa_init_primary_exception(void *__object, std::type_info *__tinfo,
void ( *__dest) (void *))
noexcept;
}
}
#pragma GCC visibility pop
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 1 3
# 33 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/hash_bytes.h" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/hash_bytes.h" 3
namespace std
{
size_t
_Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
size_t
_Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
}
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 41 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 2 3
#pragma GCC visibility push(default)
extern "C++" {
namespace __cxxabiv1
{
class __class_type_info;
}
# 83 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 3
namespace std
{
class type_info
{
public:
virtual ~type_info();
const char* name() const noexcept
{ return __name[0] == '*' ? __name + 1 : __name; }
bool before(const type_info& __arg) const noexcept;
bool operator==(const type_info& __arg) const noexcept;
size_t hash_code() const noexcept
{
return _Hash_bytes(name(), __builtin_strlen(name()),
static_cast<size_t>(0xc70f6907UL));
}
virtual bool __is_pointer_p() const;
virtual bool __is_function_p() const;
virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
unsigned __outer) const;
virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
void **__obj_ptr) const;
protected:
const char *__name;
explicit type_info(const char *__n): __name(__n) { }
private:
type_info& operator=(const type_info&) = delete;
type_info(const type_info&) = delete;
# 166 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 3
};
inline bool
type_info::before(const type_info& __arg) const noexcept
{
if (__name[0] != '*' || __arg.__name[0] != '*')
return __builtin_strcmp (__name, __arg.__name) < 0;
# 186 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 3
return __name < __arg.__name;
}
inline bool
type_info::operator==(const type_info& __arg) const noexcept
{
if (std::__is_constant_evaluated())
return this == &__arg;
if (__name == __arg.__name)
return true;
return __name[0] != '*' && __builtin_strcmp (__name, __arg.name()) == 0;
}
# 219 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/typeinfo" 3
class bad_cast : public exception
{
public:
bad_cast() noexcept { }
virtual ~bad_cast() noexcept;
virtual const char* what() const noexcept;
};
class bad_typeid : public exception
{
public:
bad_typeid () noexcept { }
virtual ~bad_typeid() noexcept;
virtual const char* what() const noexcept;
};
}
}
#pragma GCC visibility pop
# 38 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/new" 1 3
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/new" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 47 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/new" 2 3
#pragma GCC visibility push(default)
extern "C++" {
namespace std
{
class bad_alloc : public exception
{
public:
bad_alloc() throw() { }
bad_alloc(const bad_alloc&) = default;
bad_alloc& operator=(const bad_alloc&) = default;
virtual ~bad_alloc() throw();
virtual const char* what() const throw();
};
class bad_array_new_length : public bad_alloc
{
public:
bad_array_new_length() throw() { }
virtual ~bad_array_new_length() throw();
virtual const char* what() const throw();
};
enum class align_val_t: size_t {};
struct nothrow_t
{
explicit nothrow_t() = default;
};
extern const nothrow_t nothrow;
typedef void (*new_handler)();
new_handler set_new_handler(new_handler) throw();
new_handler get_new_handler() noexcept;
}
# 131 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/new" 3
[[__nodiscard__]] void* operator new(std::size_t)
__attribute__((__externally_visible__));
[[__nodiscard__]] void* operator new[](std::size_t)
__attribute__((__externally_visible__));
void operator delete(void*) noexcept
__attribute__((__externally_visible__));
void operator delete[](void*) noexcept
__attribute__((__externally_visible__));
void operator delete(void*, std::size_t) noexcept
__attribute__((__externally_visible__));
void operator delete[](void*, std::size_t) noexcept
__attribute__((__externally_visible__));
[[__nodiscard__]] void* operator new(std::size_t, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
[[__nodiscard__]] void* operator new[](std::size_t, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
void operator delete(void*, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
void operator delete[](void*, const std::nothrow_t&) noexcept
__attribute__((__externally_visible__));
[[__nodiscard__]] void* operator new(std::size_t, std::align_val_t)
__attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
[[__nodiscard__]] void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&)
noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
void operator delete(void*, std::align_val_t)
noexcept __attribute__((__externally_visible__));
void operator delete(void*, std::align_val_t, const std::nothrow_t&)
noexcept __attribute__((__externally_visible__));
[[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t)
__attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
[[__nodiscard__]] void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&)
noexcept __attribute__((__externally_visible__, __alloc_size__ (1), __malloc__));
void operator delete[](void*, std::align_val_t)
noexcept __attribute__((__externally_visible__));
void operator delete[](void*, std::align_val_t, const std::nothrow_t&)
noexcept __attribute__((__externally_visible__));
void operator delete(void*, std::size_t, std::align_val_t)
noexcept __attribute__((__externally_visible__));
void operator delete[](void*, std::size_t, std::align_val_t)
noexcept __attribute__((__externally_visible__));
[[__nodiscard__]] inline void* operator new(std::size_t, void* __p) noexcept
{ return __p; }
[[__nodiscard__]] inline void* operator new[](std::size_t, void* __p) noexcept
{ return __p; }
inline void operator delete (void*, void*) noexcept { }
inline void operator delete[](void*, void*) noexcept { }
}
namespace std
{
template<typename _Tp>
[[nodiscard]] constexpr _Tp*
launder(_Tp* __p) noexcept
{ return __builtin_launder(__p); }
template<typename _Ret, typename... _Args , bool _NE>
void launder(_Ret (*)(_Args...) noexcept (_NE)) = delete;
template<typename _Ret, typename... _Args , bool _NE>
void launder(_Ret (*)(_Args......) noexcept (_NE)) = delete;
void launder(void*) = delete;
void launder(const void*) = delete;
void launder(volatile void*) = delete;
void launder(const volatile void*) = delete;
}
namespace std
{
struct destroying_delete_t
{
explicit destroying_delete_t() = default;
};
inline constexpr destroying_delete_t destroying_delete{};
}
#pragma GCC visibility pop
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 1 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 1 3
# 33 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
# 63 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 64 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
class reference_wrapper;
# 86 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp, _Tp __v>
struct integral_constant
{
static constexpr _Tp value = __v;
using value_type = _Tp;
using type = integral_constant<_Tp, __v>;
constexpr operator value_type() const noexcept { return value; }
constexpr value_type operator()() const noexcept { return value; }
};
# 106 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<bool __v>
using __bool_constant = integral_constant<bool, __v>;
using true_type = __bool_constant<true>;
using false_type = __bool_constant<false>;
template<bool __v>
using bool_constant = __bool_constant<__v>;
template<bool, typename _Tp = void>
struct enable_if
{ };
template<typename _Tp>
struct enable_if<true, _Tp>
{ using type = _Tp; };
template<bool _Cond, typename _Tp = void>
using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
template<bool>
struct __conditional
{
template<typename _Tp, typename>
using type = _Tp;
};
template<>
struct __conditional<false>
{
template<typename, typename _Up>
using type = _Up;
};
template<bool _Cond, typename _If, typename _Else>
using __conditional_t
= typename __conditional<_Cond>::template type<_If, _Else>;
template <typename _Type>
struct __type_identity
{ using type = _Type; };
template<typename _Tp>
using __type_identity_t = typename __type_identity<_Tp>::type;
namespace __detail
{
template<typename _Tp, typename...>
using __first_t = _Tp;
template<typename... _Bn>
auto __or_fn(int) -> __first_t<false_type,
__enable_if_t<!bool(_Bn::value)>...>;
template<typename... _Bn>
auto __or_fn(...) -> true_type;
template<typename... _Bn>
auto __and_fn(int) -> __first_t<true_type,
__enable_if_t<bool(_Bn::value)>...>;
template<typename... _Bn>
auto __and_fn(...) -> false_type;
}
template<typename... _Bn>
struct __or_
: decltype(__detail::__or_fn<_Bn...>(0))
{ };
template<typename... _Bn>
struct __and_
: decltype(__detail::__and_fn<_Bn...>(0))
{ };
template<typename _Pp>
struct __not_
: __bool_constant<!bool(_Pp::value)>
{ };
template<typename... _Bn>
inline constexpr bool __or_v = __or_<_Bn...>::value;
template<typename... _Bn>
inline constexpr bool __and_v = __and_<_Bn...>::value;
namespace __detail
{
template<typename , typename _B1, typename... _Bn>
struct __disjunction_impl
{ using type = _B1; };
template<typename _B1, typename _B2, typename... _Bn>
struct __disjunction_impl<__enable_if_t<!bool(_B1::value)>, _B1, _B2, _Bn...>
{ using type = typename __disjunction_impl<void, _B2, _Bn...>::type; };
template<typename , typename _B1, typename... _Bn>
struct __conjunction_impl
{ using type = _B1; };
template<typename _B1, typename _B2, typename... _Bn>
struct __conjunction_impl<__enable_if_t<bool(_B1::value)>, _B1, _B2, _Bn...>
{ using type = typename __conjunction_impl<void, _B2, _Bn...>::type; };
}
template<typename... _Bn>
struct conjunction
: __detail::__conjunction_impl<void, _Bn...>::type
{ };
template<>
struct conjunction<>
: true_type
{ };
template<typename... _Bn>
struct disjunction
: __detail::__disjunction_impl<void, _Bn...>::type
{ };
template<>
struct disjunction<>
: false_type
{ };
template<typename _Pp>
struct negation
: __not_<_Pp>::type
{ };
template<typename... _Bn>
inline constexpr bool conjunction_v = conjunction<_Bn...>::value;
template<typename... _Bn>
inline constexpr bool disjunction_v = disjunction<_Bn...>::value;
template<typename _Pp>
inline constexpr bool negation_v = negation<_Pp>::value;
template<typename>
struct is_reference;
template<typename>
struct is_function;
template<typename>
struct is_void;
template<typename>
struct remove_cv;
template<typename>
struct is_const;
template<typename>
struct __is_array_unknown_bounds;
template <typename _Tp, size_t = sizeof(_Tp)>
constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>)
{ return {}; }
template <typename _TypeIdentity,
typename _NestedType = typename _TypeIdentity::type>
constexpr typename __or_<
is_reference<_NestedType>,
is_function<_NestedType>,
is_void<_NestedType>,
__is_array_unknown_bounds<_NestedType>
>::type __is_complete_or_unbounded(_TypeIdentity)
{ return {}; }
template<typename _Tp>
using __remove_cv_t = typename remove_cv<_Tp>::type;
template<typename _Tp>
struct is_void
: public false_type { };
template<>
struct is_void<void>
: public true_type { };
template<>
struct is_void<const void>
: public true_type { };
template<>
struct is_void<volatile void>
: public true_type { };
template<>
struct is_void<const volatile void>
: public true_type { };
template<typename>
struct __is_integral_helper
: public false_type { };
template<>
struct __is_integral_helper<bool>
: public true_type { };
template<>
struct __is_integral_helper<char>
: public true_type { };
template<>
struct __is_integral_helper<signed char>
: public true_type { };
template<>
struct __is_integral_helper<unsigned char>
: public true_type { };
template<>
struct __is_integral_helper<wchar_t>
: public true_type { };
template<>
struct __is_integral_helper<char8_t>
: public true_type { };
template<>
struct __is_integral_helper<char16_t>
: public true_type { };
template<>
struct __is_integral_helper<char32_t>
: public true_type { };
template<>
struct __is_integral_helper<short>
: public true_type { };
template<>
struct __is_integral_helper<unsigned short>
: public true_type { };
template<>
struct __is_integral_helper<int>
: public true_type { };
template<>
struct __is_integral_helper<unsigned int>
: public true_type { };
template<>
struct __is_integral_helper<long>
: public true_type { };
template<>
struct __is_integral_helper<unsigned long>
: public true_type { };
template<>
struct __is_integral_helper<long long>
: public true_type { };
template<>
struct __is_integral_helper<unsigned long long>
: public true_type { };
__extension__
template<>
struct __is_integral_helper<__int128>
: public true_type { };
__extension__
template<>
struct __is_integral_helper<unsigned __int128>
: public true_type { };
# 460 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_integral
: public __is_integral_helper<__remove_cv_t<_Tp>>::type
{ };
template<typename>
struct __is_floating_point_helper
: public false_type { };
template<>
struct __is_floating_point_helper<float>
: public true_type { };
template<>
struct __is_floating_point_helper<double>
: public true_type { };
template<>
struct __is_floating_point_helper<long double>
: public true_type { };
# 513 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<>
struct __is_floating_point_helper<__float128>
: public true_type { };
template<typename _Tp>
struct is_floating_point
: public __is_floating_point_helper<__remove_cv_t<_Tp>>::type
{ };
template<typename _Tp>
struct is_array
: public __bool_constant<__is_array(_Tp)>
{ };
# 545 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename>
struct __is_pointer_helper
: public false_type { };
template<typename _Tp>
struct __is_pointer_helper<_Tp*>
: public true_type { };
template<typename _Tp>
struct is_pointer
: public __is_pointer_helper<__remove_cv_t<_Tp>>::type
{ };
template<typename>
struct is_lvalue_reference
: public false_type { };
template<typename _Tp>
struct is_lvalue_reference<_Tp&>
: public true_type { };
template<typename>
struct is_rvalue_reference
: public false_type { };
template<typename _Tp>
struct is_rvalue_reference<_Tp&&>
: public true_type { };
template<typename _Tp>
struct is_member_object_pointer
: public __bool_constant<__is_member_object_pointer(_Tp)>
{ };
# 601 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_member_function_pointer
: public __bool_constant<__is_member_function_pointer(_Tp)>
{ };
# 622 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_enum
: public __bool_constant<__is_enum(_Tp)>
{ };
template<typename _Tp>
struct is_union
: public __bool_constant<__is_union(_Tp)>
{ };
template<typename _Tp>
struct is_class
: public __bool_constant<__is_class(_Tp)>
{ };
template<typename _Tp>
struct is_function
: public __bool_constant<__is_function(_Tp)>
{ };
# 661 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_null_pointer
: public false_type { };
template<>
struct is_null_pointer<std::nullptr_t>
: public true_type { };
template<>
struct is_null_pointer<const std::nullptr_t>
: public true_type { };
template<>
struct is_null_pointer<volatile std::nullptr_t>
: public true_type { };
template<>
struct is_null_pointer<const volatile std::nullptr_t>
: public true_type { };
template<typename _Tp>
struct __is_nullptr_t
: public is_null_pointer<_Tp>
{ } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead")));
template<typename _Tp>
struct is_reference
: public __bool_constant<__is_reference(_Tp)>
{ };
# 715 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_arithmetic
: public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
{ };
template<typename _Tp>
struct is_fundamental
: public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
is_null_pointer<_Tp>>::type
{ };
template<typename _Tp>
struct is_object
: public __bool_constant<__is_object(_Tp)>
{ };
# 741 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename>
struct is_member_pointer;
template<typename _Tp>
struct is_scalar
: public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
{ };
template<typename _Tp>
struct is_compound
: public __bool_constant<!is_fundamental<_Tp>::value> { };
template<typename _Tp>
struct is_member_pointer
: public __bool_constant<__is_member_pointer(_Tp)>
{ };
# 779 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename, typename>
struct is_same;
template<typename _Tp, typename... _Types>
using __is_one_of = __or_<is_same<_Tp, _Types>...>;
__extension__
template<typename _Tp>
using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>,
signed char, signed short, signed int, signed long,
signed long long
, signed __int128
# 804 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
>;
__extension__
template<typename _Tp>
using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>,
unsigned char, unsigned short, unsigned int, unsigned long,
unsigned long long
, unsigned __int128
# 824 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
>;
template<typename _Tp>
using __is_standard_integer
= __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>;
template<typename...> using __void_t = void;
template<typename>
struct is_const
: public false_type { };
template<typename _Tp>
struct is_const<_Tp const>
: public true_type { };
template<typename>
struct is_volatile
: public false_type { };
template<typename _Tp>
struct is_volatile<_Tp volatile>
: public true_type { };
template<typename _Tp>
struct is_trivial
: public __bool_constant<__is_trivial(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_copyable
: public __bool_constant<__is_trivially_copyable(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_standard_layout
: public __bool_constant<__is_standard_layout(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct
__attribute__ ((__deprecated__ ("use '" "is_standard_layout && is_trivial" "' instead")))
is_pod
: public __bool_constant<__is_pod(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct
[[__deprecated__]]
is_literal_type
: public __bool_constant<__is_literal_type(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_empty
: public __bool_constant<__is_empty(_Tp)>
{ };
template<typename _Tp>
struct is_polymorphic
: public __bool_constant<__is_polymorphic(_Tp)>
{ };
template<typename _Tp>
struct is_final
: public __bool_constant<__is_final(_Tp)>
{ };
template<typename _Tp>
struct is_abstract
: public __bool_constant<__is_abstract(_Tp)>
{ };
template<typename _Tp,
bool = is_arithmetic<_Tp>::value>
struct __is_signed_helper
: public false_type { };
template<typename _Tp>
struct __is_signed_helper<_Tp, true>
: public __bool_constant<_Tp(-1) < _Tp(0)>
{ };
template<typename _Tp>
struct is_signed
: public __is_signed_helper<_Tp>::type
{ };
template<typename _Tp>
struct is_unsigned
: public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
{ };
template<typename _Tp, typename _Up = _Tp&&>
_Up
__declval(int);
template<typename _Tp>
_Tp
__declval(long);
template<typename _Tp>
auto declval() noexcept -> decltype(__declval<_Tp>(0));
template<typename>
struct remove_all_extents;
template<typename _Tp>
struct __is_array_known_bounds
: public false_type
{ };
template<typename _Tp, size_t _Size>
struct __is_array_known_bounds<_Tp[_Size]>
: public true_type
{ };
template<typename _Tp>
struct __is_array_unknown_bounds
: public false_type
{ };
template<typename _Tp>
struct __is_array_unknown_bounds<_Tp[]>
: public true_type
{ };
# 1006 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
struct __do_is_destructible_impl
{
template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
static true_type __test(int);
template<typename>
static false_type __test(...);
};
template<typename _Tp>
struct __is_destructible_impl
: public __do_is_destructible_impl
{
using type = decltype(__test<_Tp>(0));
};
template<typename _Tp,
bool = __or_<is_void<_Tp>,
__is_array_unknown_bounds<_Tp>,
is_function<_Tp>>::value,
bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
struct __is_destructible_safe;
template<typename _Tp>
struct __is_destructible_safe<_Tp, false, false>
: public __is_destructible_impl<typename
remove_all_extents<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_destructible_safe<_Tp, true, false>
: public false_type { };
template<typename _Tp>
struct __is_destructible_safe<_Tp, false, true>
: public true_type { };
template<typename _Tp>
struct is_destructible
: public __is_destructible_safe<_Tp>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
struct __do_is_nt_destructible_impl
{
template<typename _Tp>
static __bool_constant<noexcept(declval<_Tp&>().~_Tp())>
__test(int);
template<typename>
static false_type __test(...);
};
template<typename _Tp>
struct __is_nt_destructible_impl
: public __do_is_nt_destructible_impl
{
using type = decltype(__test<_Tp>(0));
};
template<typename _Tp,
bool = __or_<is_void<_Tp>,
__is_array_unknown_bounds<_Tp>,
is_function<_Tp>>::value,
bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
struct __is_nt_destructible_safe;
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, false, false>
: public __is_nt_destructible_impl<typename
remove_all_extents<_Tp>::type>::type
{ };
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, true, false>
: public false_type { };
template<typename _Tp>
struct __is_nt_destructible_safe<_Tp, false, true>
: public true_type { };
template<typename _Tp>
struct is_nothrow_destructible
: public __is_nt_destructible_safe<_Tp>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename... _Args>
using __is_constructible_impl
= __bool_constant<__is_constructible(_Tp, _Args...)>;
template<typename _Tp, typename... _Args>
struct is_constructible
: public __is_constructible_impl<_Tp, _Args...>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_default_constructible
: public __is_constructible_impl<_Tp>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename = void>
struct __add_lvalue_reference_helper
{ using type = _Tp; };
template<typename _Tp>
struct __add_lvalue_reference_helper<_Tp, __void_t<_Tp&>>
{ using type = _Tp&; };
template<typename _Tp>
using __add_lval_ref_t = typename __add_lvalue_reference_helper<_Tp>::type;
template<typename _Tp>
struct is_copy_constructible
: public __is_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename = void>
struct __add_rvalue_reference_helper
{ using type = _Tp; };
template<typename _Tp>
struct __add_rvalue_reference_helper<_Tp, __void_t<_Tp&&>>
{ using type = _Tp&&; };
template<typename _Tp>
using __add_rval_ref_t = typename __add_rvalue_reference_helper<_Tp>::type;
template<typename _Tp>
struct is_move_constructible
: public __is_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename... _Args>
using __is_nothrow_constructible_impl
= __bool_constant<__is_nothrow_constructible(_Tp, _Args...)>;
template<typename _Tp, typename... _Args>
struct is_nothrow_constructible
: public __is_nothrow_constructible_impl<_Tp, _Args...>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_default_constructible
: public __is_nothrow_constructible_impl<_Tp>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_copy_constructible
: public __is_nothrow_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_move_constructible
: public __is_nothrow_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename _Up>
using __is_assignable_impl = __bool_constant<__is_assignable(_Tp, _Up)>;
template<typename _Tp, typename _Up>
struct is_assignable
: public __is_assignable_impl<_Tp, _Up>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_copy_assignable
: public __is_assignable_impl<__add_lval_ref_t<_Tp>,
__add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_move_assignable
: public __is_assignable_impl<__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename _Up>
using __is_nothrow_assignable_impl
= __bool_constant<__is_nothrow_assignable(_Tp, _Up)>;
template<typename _Tp, typename _Up>
struct is_nothrow_assignable
: public __is_nothrow_assignable_impl<_Tp, _Up>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_copy_assignable
: public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
__add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_move_assignable
: public __is_nothrow_assignable_impl<__add_lval_ref_t<_Tp>,
__add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename... _Args>
using __is_trivially_constructible_impl
= __bool_constant<__is_trivially_constructible(_Tp, _Args...)>;
template<typename _Tp, typename... _Args>
struct is_trivially_constructible
: public __is_trivially_constructible_impl<_Tp, _Args...>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_default_constructible
: public __is_trivially_constructible_impl<_Tp>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
constexpr bool __is_implicitly_default_constructible_v
= requires (void(&__f)(_Tp)) { __f({}); };
template<typename _Tp>
struct __is_implicitly_default_constructible
: __bool_constant<__is_implicitly_default_constructible_v<_Tp>>
{ };
# 1351 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct is_trivially_copy_constructible
: public __is_trivially_constructible_impl<_Tp, __add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_move_constructible
: public __is_trivially_constructible_impl<_Tp, __add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename _Up>
using __is_trivially_assignable_impl
= __bool_constant<__is_trivially_assignable(_Tp, _Up)>;
template<typename _Tp, typename _Up>
struct is_trivially_assignable
: public __is_trivially_assignable_impl<_Tp, _Up>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_copy_assignable
: public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
__add_lval_ref_t<const _Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_move_assignable
: public __is_trivially_assignable_impl<__add_lval_ref_t<_Tp>,
__add_rval_ref_t<_Tp>>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_trivially_destructible
: public __and_<__is_destructible_safe<_Tp>,
__bool_constant<__has_trivial_destructor(_Tp)>>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct has_virtual_destructor
: public __bool_constant<__has_virtual_destructor(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct alignment_of
: public integral_constant<std::size_t, alignof(_Tp)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename>
struct rank
: public integral_constant<std::size_t, 0> { };
template<typename _Tp, std::size_t _Size>
struct rank<_Tp[_Size]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
template<typename _Tp>
struct rank<_Tp[]>
: public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
template<typename, unsigned _Uint = 0>
struct extent
: public integral_constant<size_t, 0> { };
template<typename _Tp, size_t _Size>
struct extent<_Tp[_Size], 0>
: public integral_constant<size_t, _Size> { };
template<typename _Tp, unsigned _Uint, size_t _Size>
struct extent<_Tp[_Size], _Uint>
: public extent<_Tp, _Uint - 1>::type { };
template<typename _Tp>
struct extent<_Tp[], 0>
: public integral_constant<size_t, 0> { };
template<typename _Tp, unsigned _Uint>
struct extent<_Tp[], _Uint>
: public extent<_Tp, _Uint - 1>::type { };
template<typename _Tp, typename _Up>
struct is_same
: public __bool_constant<__is_same(_Tp, _Up)>
{ };
# 1491 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Base, typename _Derived>
struct is_base_of
: public __bool_constant<__is_base_of(_Base, _Derived)>
{ };
template<typename _From, typename _To>
struct is_convertible
: public __bool_constant<__is_convertible(_From, _To)>
{ };
# 1540 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _ToElementType, typename _FromElementType>
using __is_array_convertible
= is_convertible<_FromElementType(*)[], _ToElementType(*)[]>;
# 1558 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _From, typename _To,
bool = __or_<is_void<_From>, is_function<_To>,
is_array<_To>>::value>
struct __is_nt_convertible_helper
: is_void<_To>
{ };
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
template<typename _From, typename _To>
class __is_nt_convertible_helper<_From, _To, false>
{
template<typename _To1>
static void __test_aux(_To1) noexcept;
template<typename _From1, typename _To1>
static
__bool_constant<noexcept(__test_aux<_To1>(std::declval<_From1>()))>
__test(int);
template<typename, typename>
static false_type
__test(...);
public:
using type = decltype(__test<_From, _To>(0));
};
#pragma GCC diagnostic pop
template<typename _From, typename _To>
struct is_nothrow_convertible
: public __is_nt_convertible_helper<_From, _To>::type
{ };
template<typename _From, typename _To>
inline constexpr bool is_nothrow_convertible_v
= is_nothrow_convertible<_From, _To>::value;
template<typename _Tp>
struct remove_const
{ using type = _Tp; };
template<typename _Tp>
struct remove_const<_Tp const>
{ using type = _Tp; };
template<typename _Tp>
struct remove_volatile
{ using type = _Tp; };
template<typename _Tp>
struct remove_volatile<_Tp volatile>
{ using type = _Tp; };
template<typename _Tp>
struct remove_cv
{ using type = __remove_cv(_Tp); };
# 1644 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct add_const
{ using type = _Tp const; };
template<typename _Tp>
struct add_volatile
{ using type = _Tp volatile; };
template<typename _Tp>
struct add_cv
{ using type = _Tp const volatile; };
template<typename _Tp>
using remove_const_t = typename remove_const<_Tp>::type;
template<typename _Tp>
using remove_volatile_t = typename remove_volatile<_Tp>::type;
template<typename _Tp>
using remove_cv_t = typename remove_cv<_Tp>::type;
template<typename _Tp>
using add_const_t = typename add_const<_Tp>::type;
template<typename _Tp>
using add_volatile_t = typename add_volatile<_Tp>::type;
template<typename _Tp>
using add_cv_t = typename add_cv<_Tp>::type;
# 1692 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct remove_reference
{ using type = _Tp; };
template<typename _Tp>
struct remove_reference<_Tp&>
{ using type = _Tp; };
template<typename _Tp>
struct remove_reference<_Tp&&>
{ using type = _Tp; };
template<typename _Tp>
struct add_lvalue_reference
{ using type = __add_lval_ref_t<_Tp>; };
template<typename _Tp>
struct add_rvalue_reference
{ using type = __add_rval_ref_t<_Tp>; };
template<typename _Tp>
using remove_reference_t = typename remove_reference<_Tp>::type;
template<typename _Tp>
using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
template<typename _Tp>
using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
template<typename _Unqualified, bool _IsConst, bool _IsVol>
struct __cv_selector;
template<typename _Unqualified>
struct __cv_selector<_Unqualified, false, false>
{ using __type = _Unqualified; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, false, true>
{ using __type = volatile _Unqualified; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, true, false>
{ using __type = const _Unqualified; };
template<typename _Unqualified>
struct __cv_selector<_Unqualified, true, true>
{ using __type = const volatile _Unqualified; };
template<typename _Qualified, typename _Unqualified,
bool _IsConst = is_const<_Qualified>::value,
bool _IsVol = is_volatile<_Qualified>::value>
class __match_cv_qualifiers
{
using __match = __cv_selector<_Unqualified, _IsConst, _IsVol>;
public:
using __type = typename __match::__type;
};
template<typename _Tp>
struct __make_unsigned
{ using __type = _Tp; };
template<>
struct __make_unsigned<char>
{ using __type = unsigned char; };
template<>
struct __make_unsigned<signed char>
{ using __type = unsigned char; };
template<>
struct __make_unsigned<short>
{ using __type = unsigned short; };
template<>
struct __make_unsigned<int>
{ using __type = unsigned int; };
template<>
struct __make_unsigned<long>
{ using __type = unsigned long; };
template<>
struct __make_unsigned<long long>
{ using __type = unsigned long long; };
__extension__
template<>
struct __make_unsigned<__int128>
{ using __type = unsigned __int128; };
# 1819 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value,
bool _IsEnum = __is_enum(_Tp)>
class __make_unsigned_selector;
template<typename _Tp>
class __make_unsigned_selector<_Tp, true, false>
{
using __unsigned_type
= typename __make_unsigned<__remove_cv_t<_Tp>>::__type;
public:
using __type
= typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
};
class __make_unsigned_selector_base
{
protected:
template<typename...> struct _List { };
template<typename _Tp, typename... _Up>
struct _List<_Tp, _Up...> : _List<_Up...>
{ static constexpr size_t __size = sizeof(_Tp); };
template<size_t _Sz, typename _Tp, bool = (_Sz <= _Tp::__size)>
struct __select;
template<size_t _Sz, typename _Uint, typename... _UInts>
struct __select<_Sz, _List<_Uint, _UInts...>, true>
{ using __type = _Uint; };
template<size_t _Sz, typename _Uint, typename... _UInts>
struct __select<_Sz, _List<_Uint, _UInts...>, false>
: __select<_Sz, _List<_UInts...>>
{ };
};
template<typename _Tp>
class __make_unsigned_selector<_Tp, false, true>
: __make_unsigned_selector_base
{
using _UInts = _List<unsigned char, unsigned short, unsigned int,
unsigned long, unsigned long long>;
using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;
public:
using __type
= typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
};
template<>
struct __make_unsigned<wchar_t>
{
using __type
= typename __make_unsigned_selector<wchar_t, false, true>::__type;
};
template<>
struct __make_unsigned<char8_t>
{
using __type
= typename __make_unsigned_selector<char8_t, false, true>::__type;
};
template<>
struct __make_unsigned<char16_t>
{
using __type
= typename __make_unsigned_selector<char16_t, false, true>::__type;
};
template<>
struct __make_unsigned<char32_t>
{
using __type
= typename __make_unsigned_selector<char32_t, false, true>::__type;
};
template<typename _Tp>
struct make_unsigned
{ using type = typename __make_unsigned_selector<_Tp>::__type; };
template<> struct make_unsigned<bool>;
template<> struct make_unsigned<bool const>;
template<> struct make_unsigned<bool volatile>;
template<> struct make_unsigned<bool const volatile>;
template<typename _Tp>
struct __make_signed
{ using __type = _Tp; };
template<>
struct __make_signed<char>
{ using __type = signed char; };
template<>
struct __make_signed<unsigned char>
{ using __type = signed char; };
template<>
struct __make_signed<unsigned short>
{ using __type = signed short; };
template<>
struct __make_signed<unsigned int>
{ using __type = signed int; };
template<>
struct __make_signed<unsigned long>
{ using __type = signed long; };
template<>
struct __make_signed<unsigned long long>
{ using __type = signed long long; };
__extension__
template<>
struct __make_signed<unsigned __int128>
{ using __type = __int128; };
# 1979 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value,
bool _IsEnum = __is_enum(_Tp)>
class __make_signed_selector;
template<typename _Tp>
class __make_signed_selector<_Tp, true, false>
{
using __signed_type
= typename __make_signed<__remove_cv_t<_Tp>>::__type;
public:
using __type
= typename __match_cv_qualifiers<_Tp, __signed_type>::__type;
};
template<typename _Tp>
class __make_signed_selector<_Tp, false, true>
{
using __unsigned_type = typename __make_unsigned_selector<_Tp>::__type;
public:
using __type = typename __make_signed_selector<__unsigned_type>::__type;
};
template<>
struct __make_signed<wchar_t>
{
using __type
= typename __make_signed_selector<wchar_t, false, true>::__type;
};
template<>
struct __make_signed<char8_t>
{
using __type
= typename __make_signed_selector<char8_t, false, true>::__type;
};
template<>
struct __make_signed<char16_t>
{
using __type
= typename __make_signed_selector<char16_t, false, true>::__type;
};
template<>
struct __make_signed<char32_t>
{
using __type
= typename __make_signed_selector<char32_t, false, true>::__type;
};
template<typename _Tp>
struct make_signed
{ using type = typename __make_signed_selector<_Tp>::__type; };
template<> struct make_signed<bool>;
template<> struct make_signed<bool const>;
template<> struct make_signed<bool volatile>;
template<> struct make_signed<bool const volatile>;
template<typename _Tp>
using make_signed_t = typename make_signed<_Tp>::type;
template<typename _Tp>
using make_unsigned_t = typename make_unsigned<_Tp>::type;
template<typename _Tp>
struct remove_extent
{ using type = _Tp; };
template<typename _Tp, std::size_t _Size>
struct remove_extent<_Tp[_Size]>
{ using type = _Tp; };
template<typename _Tp>
struct remove_extent<_Tp[]>
{ using type = _Tp; };
template<typename _Tp>
struct remove_all_extents
{ using type = _Tp; };
template<typename _Tp, std::size_t _Size>
struct remove_all_extents<_Tp[_Size]>
{ using type = typename remove_all_extents<_Tp>::type; };
template<typename _Tp>
struct remove_all_extents<_Tp[]>
{ using type = typename remove_all_extents<_Tp>::type; };
template<typename _Tp>
using remove_extent_t = typename remove_extent<_Tp>::type;
template<typename _Tp>
using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
template<typename _Tp>
struct remove_pointer
{ using type = __remove_pointer(_Tp); };
# 2124 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp, typename = void>
struct __add_pointer_helper
{ using type = _Tp; };
template<typename _Tp>
struct __add_pointer_helper<_Tp, __void_t<_Tp*>>
{ using type = _Tp*; };
template<typename _Tp>
struct add_pointer
: public __add_pointer_helper<_Tp>
{ };
template<typename _Tp>
struct add_pointer<_Tp&>
{ using type = _Tp*; };
template<typename _Tp>
struct add_pointer<_Tp&&>
{ using type = _Tp*; };
template<typename _Tp>
using remove_pointer_t = typename remove_pointer<_Tp>::type;
template<typename _Tp>
using add_pointer_t = typename add_pointer<_Tp>::type;
template<std::size_t _Len>
struct __aligned_storage_msa
{
union __type
{
unsigned char __data[_Len];
struct __attribute__((__aligned__)) { } __align;
};
};
# 2179 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<std::size_t _Len, std::size_t _Align =
__alignof__(typename __aligned_storage_msa<_Len>::__type)>
struct
aligned_storage
{
union type
{
unsigned char __data[_Len];
struct __attribute__((__aligned__((_Align)))) { } __align;
};
};
template <typename... _Types>
struct __strictest_alignment
{
static const size_t _S_alignment = 0;
static const size_t _S_size = 0;
};
template <typename _Tp, typename... _Types>
struct __strictest_alignment<_Tp, _Types...>
{
static const size_t _S_alignment =
alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
static const size_t _S_size =
sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
};
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# 2225 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <size_t _Len, typename... _Types>
struct
aligned_union
{
private:
static_assert(sizeof...(_Types) != 0, "At least one type is required");
using __strictest = __strictest_alignment<_Types...>;
static const size_t _S_len = _Len > __strictest::_S_size
? _Len : __strictest::_S_size;
public:
static const size_t alignment_value = __strictest::_S_alignment;
using type = typename aligned_storage<_S_len, alignment_value>::type;
};
template <size_t _Len, typename... _Types>
const size_t aligned_union<_Len, _Types...>::alignment_value;
#pragma GCC diagnostic pop
template<typename _Up>
struct __decay_selector
: __conditional_t<is_const<const _Up>::value,
remove_cv<_Up>,
add_pointer<_Up>>
{ };
template<typename _Up, size_t _Nm>
struct __decay_selector<_Up[_Nm]>
{ using type = _Up*; };
template<typename _Up>
struct __decay_selector<_Up[]>
{ using type = _Up*; };
template<typename _Tp>
struct decay
{ using type = typename __decay_selector<_Tp>::type; };
template<typename _Tp>
struct decay<_Tp&>
{ using type = typename __decay_selector<_Tp>::type; };
template<typename _Tp>
struct decay<_Tp&&>
{ using type = typename __decay_selector<_Tp>::type; };
template<typename _Tp>
struct __strip_reference_wrapper
{
using __type = _Tp;
};
template<typename _Tp>
struct __strip_reference_wrapper<reference_wrapper<_Tp> >
{
using __type = _Tp&;
};
template<typename _Tp>
using __decay_t = typename decay<_Tp>::type;
template<typename _Tp>
using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>;
template<typename... _Cond>
using _Require = __enable_if_t<__and_<_Cond...>::value>;
template<typename _Tp>
using __remove_cvref_t
= typename remove_cv<typename remove_reference<_Tp>::type>::type;
template<bool _Cond, typename _Iftrue, typename _Iffalse>
struct conditional
{ using type = _Iftrue; };
template<typename _Iftrue, typename _Iffalse>
struct conditional<false, _Iftrue, _Iffalse>
{ using type = _Iffalse; };
template<typename... _Tp>
struct common_type;
# 2340 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct __success_type
{ using type = _Tp; };
struct __failure_type
{ };
struct __do_common_type_impl
{
template<typename _Tp, typename _Up>
using __cond_t
= decltype(true ? std::declval<_Tp>() : std::declval<_Up>());
template<typename _Tp, typename _Up>
static __success_type<__decay_t<__cond_t<_Tp, _Up>>>
_S_test(int);
template<typename _Tp, typename _Up>
static __success_type<__remove_cvref_t<__cond_t<const _Tp&, const _Up&>>>
_S_test_2(int);
template<typename, typename>
static __failure_type
_S_test_2(...);
template<typename _Tp, typename _Up>
static decltype(_S_test_2<_Tp, _Up>(0))
_S_test(...);
};
template<>
struct common_type<>
{ };
template<typename _Tp0>
struct common_type<_Tp0>
: public common_type<_Tp0, _Tp0>
{ };
template<typename _Tp1, typename _Tp2,
typename _Dp1 = __decay_t<_Tp1>, typename _Dp2 = __decay_t<_Tp2>>
struct __common_type_impl
{
using type = common_type<_Dp1, _Dp2>;
};
template<typename _Tp1, typename _Tp2>
struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2>
: private __do_common_type_impl
{
using type = decltype(_S_test<_Tp1, _Tp2>(0));
};
template<typename _Tp1, typename _Tp2>
struct common_type<_Tp1, _Tp2>
: public __common_type_impl<_Tp1, _Tp2>::type
{ };
template<typename...>
struct __common_type_pack
{ };
template<typename, typename, typename = void>
struct __common_type_fold;
template<typename _Tp1, typename _Tp2, typename... _Rp>
struct common_type<_Tp1, _Tp2, _Rp...>
: public __common_type_fold<common_type<_Tp1, _Tp2>,
__common_type_pack<_Rp...>>
{ };
template<typename _CTp, typename... _Rp>
struct __common_type_fold<_CTp, __common_type_pack<_Rp...>,
__void_t<typename _CTp::type>>
: public common_type<typename _CTp::type, _Rp...>
{ };
template<typename _CTp, typename _Rp>
struct __common_type_fold<_CTp, _Rp, void>
{ };
template<typename _Tp, bool = __is_enum(_Tp)>
struct __underlying_type_impl
{
using type = __underlying_type(_Tp);
};
template<typename _Tp>
struct __underlying_type_impl<_Tp, false>
{ };
template<typename _Tp>
struct underlying_type
: public __underlying_type_impl<_Tp>
{ };
template<typename _Tp>
struct __declval_protector
{
static const bool __stop = false;
};
template<typename _Tp>
auto declval() noexcept -> decltype(__declval<_Tp>(0))
{
static_assert(__declval_protector<_Tp>::__stop,
"declval() must not be used!");
return __declval<_Tp>(0);
}
template<typename _Signature>
struct result_of;
struct __invoke_memfun_ref { };
struct __invoke_memfun_deref { };
struct __invoke_memobj_ref { };
struct __invoke_memobj_deref { };
struct __invoke_other { };
template<typename _Tp, typename _Tag>
struct __result_of_success : __success_type<_Tp>
{ using __invoke_type = _Tag; };
struct __result_of_memfun_ref_impl
{
template<typename _Fp, typename _Tp1, typename... _Args>
static __result_of_success<decltype(
(std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
), __invoke_memfun_ref> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun_ref
: private __result_of_memfun_ref_impl
{
using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0));
};
struct __result_of_memfun_deref_impl
{
template<typename _Fp, typename _Tp1, typename... _Args>
static __result_of_success<decltype(
((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
), __invoke_memfun_deref> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun_deref
: private __result_of_memfun_deref_impl
{
using type = decltype(_S_test<_MemPtr, _Arg, _Args...>(0));
};
struct __result_of_memobj_ref_impl
{
template<typename _Fp, typename _Tp1>
static __result_of_success<decltype(
std::declval<_Tp1>().*std::declval<_Fp>()
), __invoke_memobj_ref> _S_test(int);
template<typename, typename>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj_ref
: private __result_of_memobj_ref_impl
{
using type = decltype(_S_test<_MemPtr, _Arg>(0));
};
struct __result_of_memobj_deref_impl
{
template<typename _Fp, typename _Tp1>
static __result_of_success<decltype(
(*std::declval<_Tp1>()).*std::declval<_Fp>()
), __invoke_memobj_deref> _S_test(int);
template<typename, typename>
static __failure_type _S_test(...);
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj_deref
: private __result_of_memobj_deref_impl
{
using type = decltype(_S_test<_MemPtr, _Arg>(0));
};
template<typename _MemPtr, typename _Arg>
struct __result_of_memobj;
template<typename _Res, typename _Class, typename _Arg>
struct __result_of_memobj<_Res _Class::*, _Arg>
{
using _Argval = __remove_cvref_t<_Arg>;
using _MemPtr = _Res _Class::*;
using type = typename __conditional_t<__or_<is_same<_Argval, _Class>,
is_base_of<_Class, _Argval>>::value,
__result_of_memobj_ref<_MemPtr, _Arg>,
__result_of_memobj_deref<_MemPtr, _Arg>
>::type;
};
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_memfun;
template<typename _Res, typename _Class, typename _Arg, typename... _Args>
struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
{
using _Argval = typename remove_reference<_Arg>::type;
using _MemPtr = _Res _Class::*;
using type = typename __conditional_t<is_base_of<_Class, _Argval>::value,
__result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
__result_of_memfun_deref<_MemPtr, _Arg, _Args...>
>::type;
};
template<typename _Tp, typename _Up = __remove_cvref_t<_Tp>>
struct __inv_unwrap
{
using type = _Tp;
};
template<typename _Tp, typename _Up>
struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
{
using type = _Up&;
};
template<bool, bool, typename _Functor, typename... _ArgTypes>
struct __result_of_impl
{
using type = __failure_type;
};
template<typename _MemPtr, typename _Arg>
struct __result_of_impl<true, false, _MemPtr, _Arg>
: public __result_of_memobj<__decay_t<_MemPtr>,
typename __inv_unwrap<_Arg>::type>
{ };
template<typename _MemPtr, typename _Arg, typename... _Args>
struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
: public __result_of_memfun<__decay_t<_MemPtr>,
typename __inv_unwrap<_Arg>::type, _Args...>
{ };
struct __result_of_other_impl
{
template<typename _Fn, typename... _Args>
static __result_of_success<decltype(
std::declval<_Fn>()(std::declval<_Args>()...)
), __invoke_other> _S_test(int);
template<typename...>
static __failure_type _S_test(...);
};
template<typename _Functor, typename... _ArgTypes>
struct __result_of_impl<false, false, _Functor, _ArgTypes...>
: private __result_of_other_impl
{
using type = decltype(_S_test<_Functor, _ArgTypes...>(0));
};
template<typename _Functor, typename... _ArgTypes>
struct __invoke_result
: public __result_of_impl<
is_member_object_pointer<
typename remove_reference<_Functor>::type
>::value,
is_member_function_pointer<
typename remove_reference<_Functor>::type
>::value,
_Functor, _ArgTypes...
>::type
{ };
template<typename _Fn, typename... _Args>
using __invoke_result_t = typename __invoke_result<_Fn, _Args...>::type;
template<typename _Functor, typename... _ArgTypes>
struct result_of<_Functor(_ArgTypes...)>
: public __invoke_result<_Functor, _ArgTypes...>
{ } __attribute__ ((__deprecated__ ("use '" "std::invoke_result" "' instead")));
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
template<size_t _Len, size_t _Align =
__alignof__(typename __aligned_storage_msa<_Len>::__type)>
using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
template <size_t _Len, typename... _Types>
using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
#pragma GCC diagnostic pop
template<typename _Tp>
using decay_t = typename decay<_Tp>::type;
template<bool _Cond, typename _Tp = void>
using enable_if_t = typename enable_if<_Cond, _Tp>::type;
template<bool _Cond, typename _Iftrue, typename _Iffalse>
using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
template<typename... _Tp>
using common_type_t = typename common_type<_Tp...>::type;
template<typename _Tp>
using underlying_type_t = typename underlying_type<_Tp>::type;
template<typename _Tp>
using result_of_t = typename result_of<_Tp>::type;
template<typename...> using void_t = void;
# 2727 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Def, template<typename...> class _Op, typename... _Args>
struct __detected_or
{
using type = _Def;
using __is_detected = false_type;
};
template<typename _Def, template<typename...> class _Op, typename... _Args>
requires requires { typename _Op<_Args...>; }
struct __detected_or<_Def, _Op, _Args...>
{
using type = _Op<_Args...>;
using __is_detected = true_type;
};
# 2767 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Default, template<typename...> class _Op,
typename... _Args>
using __detected_or_t
= typename __detected_or<_Default, _Op, _Args...>::type;
# 2786 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <typename _Tp>
struct __is_swappable;
template <typename _Tp>
struct __is_nothrow_swappable;
template<typename>
struct __is_tuple_like_impl : false_type
{ };
template<typename _Tp>
struct __is_tuple_like
: public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type
{ };
template<typename _Tp>
constexpr
inline
_Require<__not_<__is_tuple_like<_Tp>>,
is_move_constructible<_Tp>,
is_move_assignable<_Tp>>
swap(_Tp&, _Tp&)
noexcept(__and_<is_nothrow_move_constructible<_Tp>,
is_nothrow_move_assignable<_Tp>>::value);
template<typename _Tp, size_t _Nm>
constexpr
inline
__enable_if_t<__is_swappable<_Tp>::value>
swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
noexcept(__is_nothrow_swappable<_Tp>::value);
namespace __swappable_details {
using std::swap;
struct __do_is_swappable_impl
{
template<typename _Tp, typename
= decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
static true_type __test(int);
template<typename>
static false_type __test(...);
};
struct __do_is_nothrow_swappable_impl
{
template<typename _Tp>
static __bool_constant<
noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
> __test(int);
template<typename>
static false_type __test(...);
};
}
template<typename _Tp>
struct __is_swappable_impl
: public __swappable_details::__do_is_swappable_impl
{
using type = decltype(__test<_Tp>(0));
};
template<typename _Tp>
struct __is_nothrow_swappable_impl
: public __swappable_details::__do_is_nothrow_swappable_impl
{
using type = decltype(__test<_Tp>(0));
};
template<typename _Tp>
struct __is_swappable
: public __is_swappable_impl<_Tp>::type
{ };
template<typename _Tp>
struct __is_nothrow_swappable
: public __is_nothrow_swappable_impl<_Tp>::type
{ };
template<typename _Tp>
struct is_swappable
: public __is_swappable_impl<_Tp>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
struct is_nothrow_swappable
: public __is_nothrow_swappable_impl<_Tp>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
inline constexpr bool is_swappable_v =
is_swappable<_Tp>::value;
template<typename _Tp>
inline constexpr bool is_nothrow_swappable_v =
is_nothrow_swappable<_Tp>::value;
namespace __swappable_with_details {
using std::swap;
struct __do_is_swappable_with_impl
{
template<typename _Tp, typename _Up, typename
= decltype(swap(std::declval<_Tp>(), std::declval<_Up>())),
typename
= decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))>
static true_type __test(int);
template<typename, typename>
static false_type __test(...);
};
struct __do_is_nothrow_swappable_with_impl
{
template<typename _Tp, typename _Up>
static __bool_constant<
noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()))
&&
noexcept(swap(std::declval<_Up>(), std::declval<_Tp>()))
> __test(int);
template<typename, typename>
static false_type __test(...);
};
}
template<typename _Tp, typename _Up>
struct __is_swappable_with_impl
: public __swappable_with_details::__do_is_swappable_with_impl
{
using type = decltype(__test<_Tp, _Up>(0));
};
template<typename _Tp>
struct __is_swappable_with_impl<_Tp&, _Tp&>
: public __swappable_details::__do_is_swappable_impl
{
using type = decltype(__test<_Tp&>(0));
};
template<typename _Tp, typename _Up>
struct __is_nothrow_swappable_with_impl
: public __swappable_with_details::__do_is_nothrow_swappable_with_impl
{
using type = decltype(__test<_Tp, _Up>(0));
};
template<typename _Tp>
struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&>
: public __swappable_details::__do_is_nothrow_swappable_impl
{
using type = decltype(__test<_Tp&>(0));
};
template<typename _Tp, typename _Up>
struct is_swappable_with
: public __is_swappable_with_impl<_Tp, _Up>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"first template argument must be a complete class or an unbounded array");
static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}),
"second template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename _Up>
struct is_nothrow_swappable_with
: public __is_nothrow_swappable_with_impl<_Tp, _Up>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"first template argument must be a complete class or an unbounded array");
static_assert(std::__is_complete_or_unbounded(__type_identity<_Up>{}),
"second template argument must be a complete class or an unbounded array");
};
template<typename _Tp, typename _Up>
inline constexpr bool is_swappable_with_v =
is_swappable_with<_Tp, _Up>::value;
template<typename _Tp, typename _Up>
inline constexpr bool is_nothrow_swappable_with_v =
is_nothrow_swappable_with<_Tp, _Up>::value;
# 3008 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Result, typename _Ret,
bool = is_void<_Ret>::value, typename = void>
struct __is_invocable_impl
: false_type
{
using __nothrow_conv = false_type;
};
template<typename _Result, typename _Ret>
struct __is_invocable_impl<_Result, _Ret,
true,
__void_t<typename _Result::type>>
: true_type
{
using __nothrow_conv = true_type;
};
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
template<typename _Result, typename _Ret>
struct __is_invocable_impl<_Result, _Ret,
false,
__void_t<typename _Result::type>>
{
private:
using _Res_t = typename _Result::type;
static _Res_t _S_get() noexcept;
template<typename _Tp>
static void _S_conv(__type_identity_t<_Tp>) noexcept;
template<typename _Tp,
bool _Nothrow = noexcept(_S_conv<_Tp>(_S_get())),
typename = decltype(_S_conv<_Tp>(_S_get())),
bool _Dangle = false
>
static __bool_constant<_Nothrow && !_Dangle>
_S_test(int);
template<typename _Tp, bool = false>
static false_type
_S_test(...);
public:
using type = decltype(_S_test<_Ret, true>(1));
using __nothrow_conv = decltype(_S_test<_Ret>(1));
};
#pragma GCC diagnostic pop
template<typename _Fn, typename... _ArgTypes>
struct __is_invocable
: __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
{ };
template<typename _Fn, typename _Tp, typename... _Args>
constexpr bool __call_is_nt(__invoke_memfun_ref)
{
using _Up = typename __inv_unwrap<_Tp>::type;
return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
std::declval<_Args>()...));
}
template<typename _Fn, typename _Tp, typename... _Args>
constexpr bool __call_is_nt(__invoke_memfun_deref)
{
return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
std::declval<_Args>()...));
}
template<typename _Fn, typename _Tp>
constexpr bool __call_is_nt(__invoke_memobj_ref)
{
using _Up = typename __inv_unwrap<_Tp>::type;
return noexcept(std::declval<_Up>().*std::declval<_Fn>());
}
template<typename _Fn, typename _Tp>
constexpr bool __call_is_nt(__invoke_memobj_deref)
{
return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
}
template<typename _Fn, typename... _Args>
constexpr bool __call_is_nt(__invoke_other)
{
return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
}
template<typename _Result, typename _Fn, typename... _Args>
struct __call_is_nothrow
: __bool_constant<
std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
>
{ };
template<typename _Fn, typename... _Args>
using __call_is_nothrow_
= __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;
template<typename _Fn, typename... _Args>
struct __is_nothrow_invocable
: __and_<__is_invocable<_Fn, _Args...>,
__call_is_nothrow_<_Fn, _Args...>>::type
{ };
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
struct __nonesuchbase {};
struct __nonesuch : private __nonesuchbase {
~__nonesuch() = delete;
__nonesuch(__nonesuch const&) = delete;
void operator=(__nonesuch const&) = delete;
};
#pragma GCC diagnostic pop
template<typename _Functor, typename... _ArgTypes>
struct invoke_result
: public __invoke_result<_Functor, _ArgTypes...>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Functor>{}),
"_Functor must be a complete class or an unbounded array");
static_assert((std::__is_complete_or_unbounded(
__type_identity<_ArgTypes>{}) && ...),
"each argument type must be a complete class or an unbounded array");
};
template<typename _Fn, typename... _Args>
using invoke_result_t = typename invoke_result<_Fn, _Args...>::type;
template<typename _Fn, typename... _ArgTypes>
struct is_invocable
: __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
"_Fn must be a complete class or an unbounded array");
static_assert((std::__is_complete_or_unbounded(
__type_identity<_ArgTypes>{}) && ...),
"each argument type must be a complete class or an unbounded array");
};
template<typename _Ret, typename _Fn, typename... _ArgTypes>
struct is_invocable_r
: __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
"_Fn must be a complete class or an unbounded array");
static_assert((std::__is_complete_or_unbounded(
__type_identity<_ArgTypes>{}) && ...),
"each argument type must be a complete class or an unbounded array");
static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}),
"_Ret must be a complete class or an unbounded array");
};
template<typename _Fn, typename... _ArgTypes>
struct is_nothrow_invocable
: __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>,
__call_is_nothrow_<_Fn, _ArgTypes...>>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
"_Fn must be a complete class or an unbounded array");
static_assert((std::__is_complete_or_unbounded(
__type_identity<_ArgTypes>{}) && ...),
"each argument type must be a complete class or an unbounded array");
};
template<typename _Result, typename _Ret>
using __is_nt_invocable_impl
= typename __is_invocable_impl<_Result, _Ret>::__nothrow_conv;
template<typename _Ret, typename _Fn, typename... _ArgTypes>
struct is_nothrow_invocable_r
: __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>,
__call_is_nothrow_<_Fn, _ArgTypes...>>::type
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Fn>{}),
"_Fn must be a complete class or an unbounded array");
static_assert((std::__is_complete_or_unbounded(
__type_identity<_ArgTypes>{}) && ...),
"each argument type must be a complete class or an unbounded array");
static_assert(std::__is_complete_or_unbounded(__type_identity<_Ret>{}),
"_Ret must be a complete class or an unbounded array");
};
# 3236 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <typename _Tp>
inline constexpr bool is_void_v = is_void<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_integral_v = is_integral<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_array_v = __is_array(_Tp);
# 3257 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <typename _Tp>
inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_lvalue_reference_v = false;
template <typename _Tp>
inline constexpr bool is_lvalue_reference_v<_Tp&> = true;
template <typename _Tp>
inline constexpr bool is_rvalue_reference_v = false;
template <typename _Tp>
inline constexpr bool is_rvalue_reference_v<_Tp&&> = true;
template <typename _Tp>
inline constexpr bool is_member_object_pointer_v =
__is_member_object_pointer(_Tp);
template <typename _Tp>
inline constexpr bool is_member_function_pointer_v =
__is_member_function_pointer(_Tp);
template <typename _Tp>
inline constexpr bool is_enum_v = __is_enum(_Tp);
template <typename _Tp>
inline constexpr bool is_union_v = __is_union(_Tp);
template <typename _Tp>
inline constexpr bool is_class_v = __is_class(_Tp);
template <typename _Tp>
inline constexpr bool is_reference_v = __is_reference(_Tp);
# 3308 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <typename _Tp>
inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_object_v = __is_object(_Tp);
template <typename _Tp>
inline constexpr bool is_scalar_v = is_scalar<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_compound_v = !is_fundamental_v<_Tp>;
template <typename _Tp>
inline constexpr bool is_member_pointer_v = __is_member_pointer(_Tp);
template <typename _Tp>
inline constexpr bool is_const_v = false;
template <typename _Tp>
inline constexpr bool is_const_v<const _Tp> = true;
template <typename _Tp>
inline constexpr bool is_function_v = __is_function(_Tp);
# 3351 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template <typename _Tp>
inline constexpr bool is_volatile_v = false;
template <typename _Tp>
inline constexpr bool is_volatile_v<volatile _Tp> = true;
template <typename _Tp>
inline constexpr bool is_trivial_v = __is_trivial(_Tp);
template <typename _Tp>
inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(_Tp);
template <typename _Tp>
inline constexpr bool is_standard_layout_v = __is_standard_layout(_Tp);
template <typename _Tp>
__attribute__ ((__deprecated__ ("use '" "is_standard_layout_v && is_trivial_v" "' instead")))
inline constexpr bool is_pod_v = __is_pod(_Tp);
template <typename _Tp>
[[__deprecated__]]
inline constexpr bool is_literal_type_v = __is_literal_type(_Tp);
template <typename _Tp>
inline constexpr bool is_empty_v = __is_empty(_Tp);
template <typename _Tp>
inline constexpr bool is_polymorphic_v = __is_polymorphic(_Tp);
template <typename _Tp>
inline constexpr bool is_abstract_v = __is_abstract(_Tp);
template <typename _Tp>
inline constexpr bool is_final_v = __is_final(_Tp);
template <typename _Tp>
inline constexpr bool is_signed_v = is_signed<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
template <typename _Tp, typename... _Args>
inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...);
template <typename _Tp>
inline constexpr bool is_default_constructible_v = __is_constructible(_Tp);
template <typename _Tp>
inline constexpr bool is_copy_constructible_v
= __is_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_move_constructible_v
= __is_constructible(_Tp, __add_rval_ref_t<_Tp>);
template <typename _Tp, typename _Up>
inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up);
template <typename _Tp>
inline constexpr bool is_copy_assignable_v
= __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_move_assignable_v
= __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
template <typename _Tp>
inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
template <typename _Tp, typename... _Args>
inline constexpr bool is_trivially_constructible_v
= __is_trivially_constructible(_Tp, _Args...);
template <typename _Tp>
inline constexpr bool is_trivially_default_constructible_v
= __is_trivially_constructible(_Tp);
template <typename _Tp>
inline constexpr bool is_trivially_copy_constructible_v
= __is_trivially_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_trivially_move_constructible_v
= __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>);
template <typename _Tp, typename _Up>
inline constexpr bool is_trivially_assignable_v
= __is_trivially_assignable(_Tp, _Up);
template <typename _Tp>
inline constexpr bool is_trivially_copy_assignable_v
= __is_trivially_assignable(__add_lval_ref_t<_Tp>,
__add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_trivially_move_assignable_v
= __is_trivially_assignable(__add_lval_ref_t<_Tp>,
__add_rval_ref_t<_Tp>);
template <typename _Tp>
inline constexpr bool is_trivially_destructible_v = false;
template <typename _Tp>
requires (!is_reference_v<_Tp>) && requires (_Tp& __t) { __t.~_Tp(); }
inline constexpr bool is_trivially_destructible_v<_Tp>
= __has_trivial_destructor(_Tp);
template <typename _Tp>
inline constexpr bool is_trivially_destructible_v<_Tp&> = true;
template <typename _Tp>
inline constexpr bool is_trivially_destructible_v<_Tp&&> = true;
template <typename _Tp, size_t _Nm>
inline constexpr bool is_trivially_destructible_v<_Tp[_Nm]>
= is_trivially_destructible_v<_Tp>;
template <typename _Tp, typename... _Args>
inline constexpr bool is_nothrow_constructible_v
= __is_nothrow_constructible(_Tp, _Args...);
template <typename _Tp>
inline constexpr bool is_nothrow_default_constructible_v
= __is_nothrow_constructible(_Tp);
template <typename _Tp>
inline constexpr bool is_nothrow_copy_constructible_v
= __is_nothrow_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_nothrow_move_constructible_v
= __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>);
template <typename _Tp, typename _Up>
inline constexpr bool is_nothrow_assignable_v
= __is_nothrow_assignable(_Tp, _Up);
template <typename _Tp>
inline constexpr bool is_nothrow_copy_assignable_v
= __is_nothrow_assignable(__add_lval_ref_t<_Tp>,
__add_lval_ref_t<const _Tp>);
template <typename _Tp>
inline constexpr bool is_nothrow_move_assignable_v
= __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
template <typename _Tp>
inline constexpr bool is_nothrow_destructible_v =
is_nothrow_destructible<_Tp>::value;
template <typename _Tp>
inline constexpr bool has_virtual_destructor_v
= __has_virtual_destructor(_Tp);
template <typename _Tp>
inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
template <typename _Tp>
inline constexpr size_t rank_v = 0;
template <typename _Tp, size_t _Size>
inline constexpr size_t rank_v<_Tp[_Size]> = 1 + rank_v<_Tp>;
template <typename _Tp>
inline constexpr size_t rank_v<_Tp[]> = 1 + rank_v<_Tp>;
template <typename _Tp, unsigned _Idx = 0>
inline constexpr size_t extent_v = 0;
template <typename _Tp, size_t _Size>
inline constexpr size_t extent_v<_Tp[_Size], 0> = _Size;
template <typename _Tp, unsigned _Idx, size_t _Size>
inline constexpr size_t extent_v<_Tp[_Size], _Idx> = extent_v<_Tp, _Idx - 1>;
template <typename _Tp>
inline constexpr size_t extent_v<_Tp[], 0> = 0;
template <typename _Tp, unsigned _Idx>
inline constexpr size_t extent_v<_Tp[], _Idx> = extent_v<_Tp, _Idx - 1>;
template <typename _Tp, typename _Up>
inline constexpr bool is_same_v = __is_same(_Tp, _Up);
template <typename _Base, typename _Derived>
inline constexpr bool is_base_of_v = __is_base_of(_Base, _Derived);
template <typename _From, typename _To>
inline constexpr bool is_convertible_v = __is_convertible(_From, _To);
template<typename _Fn, typename... _Args>
inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value;
template<typename _Fn, typename... _Args>
inline constexpr bool is_nothrow_invocable_v
= is_nothrow_invocable<_Fn, _Args...>::value;
template<typename _Ret, typename _Fn, typename... _Args>
inline constexpr bool is_invocable_r_v
= is_invocable_r<_Ret, _Fn, _Args...>::value;
template<typename _Ret, typename _Fn, typename... _Args>
inline constexpr bool is_nothrow_invocable_r_v
= is_nothrow_invocable_r<_Ret, _Fn, _Args...>::value;
template<typename _Tp>
struct has_unique_object_representations
: bool_constant<__has_unique_object_representations(
remove_cv_t<remove_all_extents_t<_Tp>>
)>
{
static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}),
"template argument must be a complete class or an unbounded array");
};
template<typename _Tp>
inline constexpr bool has_unique_object_representations_v
= has_unique_object_representations<_Tp>::value;
template<typename _Tp>
struct is_aggregate
: bool_constant<__is_aggregate(remove_cv_t<_Tp>)>
{ };
template<typename _Tp>
inline constexpr bool is_aggregate_v = __is_aggregate(remove_cv_t<_Tp>);
# 3581 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct remove_cvref
{ using type = __remove_cvref(_Tp); };
# 3598 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
using remove_cvref_t = typename remove_cvref<_Tp>::type;
# 3608 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct type_identity { using type = _Tp; };
template<typename _Tp>
using type_identity_t = typename type_identity<_Tp>::type;
# 3621 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
struct unwrap_reference { using type = _Tp; };
template<typename _Tp>
struct unwrap_reference<reference_wrapper<_Tp>> { using type = _Tp&; };
template<typename _Tp>
using unwrap_reference_t = typename unwrap_reference<_Tp>::type;
template<typename _Tp>
struct unwrap_ref_decay { using type = unwrap_reference_t<decay_t<_Tp>>; };
template<typename _Tp>
using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type;
# 3648 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
inline constexpr bool is_bounded_array_v = __is_bounded_array(_Tp);
# 3661 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
template<typename _Tp>
inline constexpr bool is_unbounded_array_v = false;
template<typename _Tp>
inline constexpr bool is_unbounded_array_v<_Tp[]> = true;
template<typename _Tp>
struct is_bounded_array
: public bool_constant<is_bounded_array_v<_Tp>>
{ };
template<typename _Tp>
struct is_unbounded_array
: public bool_constant<is_unbounded_array_v<_Tp>>
{ };
# 3816 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/type_traits" 3
constexpr inline bool
is_constant_evaluated() noexcept
{
return __builtin_is_constant_evaluated();
}
template<typename _From, typename _To>
using __copy_cv = typename __match_cv_qualifiers<_From, _To>::__type;
template<typename _Xp, typename _Yp>
using __cond_res
= decltype(false ? declval<_Xp(&)()>()() : declval<_Yp(&)()>()());
template<typename _Ap, typename _Bp, typename = void>
struct __common_ref_impl
{ };
template<typename _Ap, typename _Bp>
using __common_ref = typename __common_ref_impl<_Ap, _Bp>::type;
template<typename _Xp, typename _Yp>
using __condres_cvref
= __cond_res<__copy_cv<_Xp, _Yp>&, __copy_cv<_Yp, _Xp>&>;
template<typename _Xp, typename _Yp>
struct __common_ref_impl<_Xp&, _Yp&, __void_t<__condres_cvref<_Xp, _Yp>>>
: enable_if<is_reference_v<__condres_cvref<_Xp, _Yp>>,
__condres_cvref<_Xp, _Yp>>
{ };
template<typename _Xp, typename _Yp>
using __common_ref_C = remove_reference_t<__common_ref<_Xp&, _Yp&>>&&;
template<typename _Xp, typename _Yp>
struct __common_ref_impl<_Xp&&, _Yp&&,
_Require<is_convertible<_Xp&&, __common_ref_C<_Xp, _Yp>>,
is_convertible<_Yp&&, __common_ref_C<_Xp, _Yp>>>>
{ using type = __common_ref_C<_Xp, _Yp>; };
template<typename _Xp, typename _Yp>
using __common_ref_D = __common_ref<const _Xp&, _Yp&>;
template<typename _Xp, typename _Yp>
struct __common_ref_impl<_Xp&&, _Yp&,
_Require<is_convertible<_Xp&&, __common_ref_D<_Xp, _Yp>>>>
{ using type = __common_ref_D<_Xp, _Yp>; };
template<typename _Xp, typename _Yp>
struct __common_ref_impl<_Xp&, _Yp&&>
: __common_ref_impl<_Yp&&, _Xp&>
{ };
template<typename _Tp, typename _Up,
template<typename> class _TQual, template<typename> class _UQual>
struct basic_common_reference
{ };
template<typename _Tp>
struct __xref
{ template<typename _Up> using __type = __copy_cv<_Tp, _Up>; };
template<typename _Tp>
struct __xref<_Tp&>
{ template<typename _Up> using __type = __copy_cv<_Tp, _Up>&; };
template<typename _Tp>
struct __xref<_Tp&&>
{ template<typename _Up> using __type = __copy_cv<_Tp, _Up>&&; };
template<typename _Tp1, typename _Tp2>
using __basic_common_ref
= typename basic_common_reference<remove_cvref_t<_Tp1>,
remove_cvref_t<_Tp2>,
__xref<_Tp1>::template __type,
__xref<_Tp2>::template __type>::type;
template<typename... _Tp>
struct common_reference;
template<typename... _Tp>
using common_reference_t = typename common_reference<_Tp...>::type;
template<>
struct common_reference<>
{ };
template<typename _Tp0>
struct common_reference<_Tp0>
{ using type = _Tp0; };
template<typename _Tp1, typename _Tp2, int _Bullet = 1, typename = void>
struct __common_reference_impl
: __common_reference_impl<_Tp1, _Tp2, _Bullet + 1>
{ };
template<typename _Tp1, typename _Tp2>
struct common_reference<_Tp1, _Tp2>
: __common_reference_impl<_Tp1, _Tp2>
{ };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1&, _Tp2&, 1,
void_t<__common_ref<_Tp1&, _Tp2&>>>
{ using type = __common_ref<_Tp1&, _Tp2&>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1&&, _Tp2&&, 1,
void_t<__common_ref<_Tp1&&, _Tp2&&>>>
{ using type = __common_ref<_Tp1&&, _Tp2&&>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1&, _Tp2&&, 1,
void_t<__common_ref<_Tp1&, _Tp2&&>>>
{ using type = __common_ref<_Tp1&, _Tp2&&>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1&&, _Tp2&, 1,
void_t<__common_ref<_Tp1&&, _Tp2&>>>
{ using type = __common_ref<_Tp1&&, _Tp2&>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1, _Tp2, 2,
void_t<__basic_common_ref<_Tp1, _Tp2>>>
{ using type = __basic_common_ref<_Tp1, _Tp2>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1, _Tp2, 3,
void_t<__cond_res<_Tp1, _Tp2>>>
{ using type = __cond_res<_Tp1, _Tp2>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1, _Tp2, 4,
void_t<common_type_t<_Tp1, _Tp2>>>
{ using type = common_type_t<_Tp1, _Tp2>; };
template<typename _Tp1, typename _Tp2>
struct __common_reference_impl<_Tp1, _Tp2, 5, void>
{ };
template<typename _Tp1, typename _Tp2, typename... _Rest>
struct common_reference<_Tp1, _Tp2, _Rest...>
: __common_type_fold<common_reference<_Tp1, _Tp2>,
__common_type_pack<_Rest...>>
{ };
template<typename _Tp1, typename _Tp2, typename... _Rest>
struct __common_type_fold<common_reference<_Tp1, _Tp2>,
__common_type_pack<_Rest...>,
void_t<common_reference_t<_Tp1, _Tp2>>>
: public common_reference<common_reference_t<_Tp1, _Tp2>, _Rest...>
{ };
}
# 38 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
inline constexpr _Tp*
__addressof(_Tp& __r) noexcept
{ return __builtin_addressof(__r); }
# 67 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
template<typename _Tp>
[[__nodiscard__]]
constexpr _Tp&&
forward(typename std::remove_reference<_Tp>::type& __t) noexcept
{ return static_cast<_Tp&&>(__t); }
template<typename _Tp>
[[__nodiscard__]]
constexpr _Tp&&
forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
{
static_assert(!std::is_lvalue_reference<_Tp>::value,
"std::forward must not be used to convert an rvalue to an lvalue");
return static_cast<_Tp&&>(__t);
}
# 123 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
template<typename _Tp>
[[__nodiscard__]]
constexpr typename std::remove_reference<_Tp>::type&&
move(_Tp&& __t) noexcept
{ return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
template<typename _Tp>
struct __move_if_noexcept_cond
: public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
is_copy_constructible<_Tp>>::type { };
# 143 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
template<typename _Tp>
[[__nodiscard__]]
constexpr
__conditional_t<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>
move_if_noexcept(_Tp& __x) noexcept
{ return std::move(__x); }
# 159 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
template<typename _Tp>
[[__nodiscard__]]
inline constexpr _Tp*
addressof(_Tp& __r) noexcept
{ return std::__addressof(__r); }
template<typename _Tp>
const _Tp* addressof(const _Tp&&) = delete;
template <typename _Tp, typename _Up = _Tp>
constexpr
inline _Tp
__exchange(_Tp& __obj, _Up&& __new_val)
{
_Tp __old_val = std::move(__obj);
__obj = std::forward<_Up>(__new_val);
return __old_val;
}
# 203 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/move.h" 3
template<typename _Tp>
constexpr
inline
typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
is_move_constructible<_Tp>,
is_move_assignable<_Tp>>::value>::type
swap(_Tp& __a, _Tp& __b)
noexcept(__and_<is_nothrow_move_constructible<_Tp>, is_nothrow_move_assignable<_Tp>>::value)
{
_Tp __tmp = std::move(__a);
__a = std::move(__b);
__b = std::move(__tmp);
}
template<typename _Tp, size_t _Nm>
constexpr
inline
typename enable_if<__is_swappable<_Tp>::value>::type
swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
noexcept(__is_nothrow_swappable<_Tp>::value)
{
for (size_t __n = 0; __n < _Nm; ++__n)
swap(__a[__n], __b[__n]);
}
}
# 42 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 2 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
class type_info;
namespace __exception_ptr
{
class exception_ptr;
}
using __exception_ptr::exception_ptr;
# 75 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
exception_ptr current_exception() noexcept;
template<typename _Ex>
exception_ptr make_exception_ptr(_Ex) noexcept;
void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
namespace __exception_ptr
{
using std::rethrow_exception;
# 97 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
class exception_ptr
{
void* _M_exception_object;
explicit exception_ptr(void* __e) noexcept;
void _M_addref() noexcept;
void _M_release() noexcept;
void *_M_get() const noexcept __attribute__ ((__pure__));
friend exception_ptr std::current_exception() noexcept;
friend void std::rethrow_exception(exception_ptr);
template<typename _Ex>
friend exception_ptr std::make_exception_ptr(_Ex) noexcept;
public:
exception_ptr() noexcept;
exception_ptr(const exception_ptr&) noexcept;
exception_ptr(nullptr_t) noexcept
: _M_exception_object(nullptr)
{ }
exception_ptr(exception_ptr&& __o) noexcept
: _M_exception_object(__o._M_exception_object)
{ __o._M_exception_object = nullptr; }
# 135 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
exception_ptr&
operator=(const exception_ptr&) noexcept;
exception_ptr&
operator=(exception_ptr&& __o) noexcept
{
exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
return *this;
}
~exception_ptr() noexcept;
void
swap(exception_ptr&) noexcept;
# 162 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
explicit operator bool() const noexcept
{ return _M_exception_object; }
friend bool
operator==(const exception_ptr&, const exception_ptr&) noexcept = default;
# 182 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
const class std::type_info*
__cxa_exception_type() const noexcept
__attribute__ ((__pure__));
};
inline
exception_ptr::exception_ptr() noexcept
: _M_exception_object(0)
{ }
inline
exception_ptr::exception_ptr(const exception_ptr& __other)
noexcept
: _M_exception_object(__other._M_exception_object)
{
if (_M_exception_object)
_M_addref();
}
inline
exception_ptr::~exception_ptr() noexcept
{
if (_M_exception_object)
_M_release();
}
inline exception_ptr&
exception_ptr::operator=(const exception_ptr& __other) noexcept
{
exception_ptr(__other).swap(*this);
return *this;
}
inline void
exception_ptr::swap(exception_ptr &__other) noexcept
{
void *__tmp = _M_exception_object;
_M_exception_object = __other._M_exception_object;
__other._M_exception_object = __tmp;
}
inline void
swap(exception_ptr& __lhs, exception_ptr& __rhs)
{ __lhs.swap(__rhs); }
template<typename _Ex>
inline void
__dest_thunk(void* __x)
{ static_cast<_Ex*>(__x)->~_Ex(); }
}
using __exception_ptr::swap;
template<typename _Ex>
exception_ptr
make_exception_ptr(_Ex __ex) noexcept
{
using _Ex2 = typename decay<_Ex>::type;
void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
(void) __cxxabiv1::__cxa_init_primary_exception(
__e, const_cast<std::type_info*>(&typeid(_Ex)),
__exception_ptr::__dest_thunk<_Ex2>);
try
{
::new (__e) _Ex2(__ex);
return exception_ptr(__e);
}
catch(...)
{
__cxxabiv1::__cxa_free_exception(__e);
return current_exception();
}
# 277 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
}
# 291 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/exception_ptr.h" 3
}
}
# 167 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 1 3
# 40 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
# 59 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 3
class nested_exception
{
exception_ptr _M_ptr;
public:
nested_exception() noexcept : _M_ptr(current_exception()) { }
nested_exception(const nested_exception&) noexcept = default;
nested_exception& operator=(const nested_exception&) noexcept = default;
virtual ~nested_exception() noexcept;
[[noreturn]]
void
rethrow_nested() const
{
if (_M_ptr)
rethrow_exception(_M_ptr);
std::terminate();
}
exception_ptr
nested_ptr() const noexcept
{ return _M_ptr; }
};
template<typename _Except>
struct _Nested_exception : public _Except, public nested_exception
{
explicit _Nested_exception(const _Except& __ex)
: _Except(__ex)
{ }
explicit _Nested_exception(_Except&& __ex)
: _Except(static_cast<_Except&&>(__ex))
{ }
};
# 145 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 3
template<typename _Tp>
[[noreturn]]
inline void
throw_with_nested(_Tp&& __t)
{
using _Up = typename decay<_Tp>::type;
using _CopyConstructible
= __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
static_assert(_CopyConstructible::value,
"throw_with_nested argument must be CopyConstructible");
if constexpr (is_class_v<_Up>)
if constexpr (!is_final_v<_Up>)
if constexpr (!is_base_of_v<nested_exception, _Up>)
throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
throw std::forward<_Tp>(__t);
}
# 203 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 3
template<typename _Ex>
inline void
rethrow_if_nested(const _Ex& __ex)
{
const _Ex* __ptr = __builtin_addressof(__ex);
# 223 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/nested_exception.h" 3
if constexpr (!is_polymorphic_v<_Ex>)
return;
else if constexpr (is_base_of_v<nested_exception, _Ex>
&& !is_convertible_v<_Ex*, nested_exception*>)
return;
else if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
__ne_ptr->rethrow_nested();
}
}
}
# 168 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/exception" 2 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 2 3
# 46 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
namespace boost {
namespace container {
class __attribute__((__visibility__("default"))) exception
: public ::std::exception
{
typedef ::std::exception std_exception_t;
public:
explicit exception(const char *msg)
: std_exception_t(), m_msg(msg)
{}
virtual const char *what() const noexcept override
{ return m_msg ? m_msg : "unknown boost::container exception"; }
private:
const char *m_msg;
};
class __attribute__((__visibility__("default"))) bad_alloc
: public exception
{
public:
bad_alloc()
: exception("boost::container::bad_alloc thrown")
{}
};
typedef bad_alloc bad_alloc_t;
class __attribute__((__visibility__("default"))) out_of_range
: public exception
{
public:
explicit out_of_range(const char *msg)
: exception(msg)
{}
};
typedef out_of_range out_of_range_t;
class __attribute__((__visibility__("default"))) length_error
: public exception
{
public:
explicit length_error(const char *msg)
: exception(msg)
{}
};
typedef length_error length_error_t;
class __attribute__((__visibility__("default"))) logic_error
: public exception
{
public:
explicit logic_error(const char *msg)
: exception(msg)
{}
};
typedef logic_error logic_error_t;
class __attribute__((__visibility__("default"))) runtime_error
: public exception
{
public:
explicit runtime_error(const char *msg)
: exception(msg)
{}
};
typedef runtime_error runtime_error_t;
}
}
namespace boost {
namespace container {
# 201 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
__attribute__ ((__noreturn__)) inline void throw_bad_alloc()
{
throw bad_alloc_t();
}
# 221 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
__attribute__ ((__noreturn__)) inline void throw_out_of_range(const char* str)
{
throw out_of_range_t(str);
}
# 242 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
__attribute__ ((__noreturn__)) inline void throw_length_error(const char* str)
{
throw length_error_t(str);
}
# 264 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
__attribute__ ((__noreturn__)) inline void throw_logic_error(const char* str)
{
throw logic_error_t(str);
}
# 284 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 3
__attribute__ ((__noreturn__)) inline void throw_runtime_error(const char* str)
{
throw runtime_error_t(str);
}
}}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 294 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/throw_exception.hpp" 2 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/new_allocator.hpp" 2 3
namespace boost {
namespace container {
template<bool Value>
struct new_allocator_bool
{ static const bool value = Value; };
template<class T>
class new_allocator;
template<>
class new_allocator<void>
{
public:
typedef void value_type;
typedef void * pointer;
typedef const void* const_pointer;
typedef new_allocator_bool<true> propagate_on_container_move_assignment;
typedef new_allocator_bool<true> is_always_equal;
template<class T2>
struct rebind
{
typedef new_allocator< T2> other;
};
new_allocator() noexcept
{}
new_allocator(const new_allocator &) noexcept
{}
new_allocator& operator=(const new_allocator &) noexcept
{
return *this;
}
template<class T2>
new_allocator(const new_allocator<T2> &) noexcept
{}
friend void swap(new_allocator &, new_allocator &) noexcept
{}
friend bool operator==(const new_allocator &, const new_allocator &) noexcept
{ return true; }
friend bool operator!=(const new_allocator &, const new_allocator &) noexcept
{ return false; }
};
template<class T>
class new_allocator
{
public:
typedef T value_type;
typedef T * pointer;
typedef const T * const_pointer;
typedef T & reference;
typedef const T & const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef new_allocator_bool<true> propagate_on_container_move_assignment;
typedef new_allocator_bool<true> is_always_equal;
template<class T2>
struct rebind
{
typedef new_allocator<T2> other;
};
new_allocator() noexcept
{}
new_allocator(const new_allocator &) noexcept
{}
new_allocator& operator=(const new_allocator &) noexcept
{
return *this;
}
template<class T2>
new_allocator(const new_allocator<T2> &) noexcept
{}
pointer allocate(size_type count)
{
const std::size_t max_count = std::size_t(-1)/(2*sizeof(T));
if(__builtin_expect(count > max_count, 0))
throw_bad_alloc();
return static_cast<T*>(::operator new(count*sizeof(T)));
}
void deallocate(pointer ptr, size_type n) noexcept
{
(void)n;
::operator delete((void*)ptr, n * sizeof(T));
}
size_type max_size() const noexcept
{ return std::size_t(-1)/(2*sizeof(T)); }
friend void swap(new_allocator &, new_allocator &) noexcept
{}
friend bool operator==(const new_allocator &, const new_allocator &) noexcept
{ return true; }
friend bool operator!=(const new_allocator &, const new_allocator &) noexcept
{ return false; }
};
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 200 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/new_allocator.hpp" 2 3
# 27 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/flat_map.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/flat_tree.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/flat_tree.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/flat_tree.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/pair.hpp" 1 3
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/pair.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/pair.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/is_pair.hpp" 1 3
# 24 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/is_pair.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 25 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/is_pair.hpp" 2 3
# 36 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/is_pair.hpp" 3
namespace boost {
namespace tuples {
struct null_type;
template <
class T0, class T1, class T2,
class T3, class T4, class T5,
class T6, class T7, class T8,
class T9>
class tuple;
}
}
namespace boost {
namespace container {
struct try_emplace_t{};
namespace dtl {
template <class T1, class T2>
struct pair;
template <class T>
struct is_pair
{
static const bool value = false;
};
template <class T1, class T2>
struct is_pair< pair<T1, T2> >
{
static const bool value = true;
};
template <class T1, class T2>
struct is_pair< std::pair<T1, T2> >
{
static const bool value = true;
};
template <class T>
struct is_not_pair
{
static const bool value = !is_pair<T>::value;
};
}
}
}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 90 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/is_pair.hpp" 2 3
# 34 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/pair.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/variadic_templates_tools.hpp" 1 3
# 22 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/variadic_templates_tools.hpp" 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_begin.hpp" 1 3
# 23 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/variadic_templates_tools.hpp" 2 3
namespace boost {
namespace container {
namespace dtl {
template<typename... Values>
class tuple;
template<> class tuple<>
{};
template<typename Head, typename... Tail>
class tuple<Head, Tail...>
: private tuple<Tail...>
{
typedef tuple<Tail...> inherited;
public:
tuple()
: inherited(), m_head()
{}
template<class U, class ...Args>
tuple(U &&u, Args && ...args)
: inherited(::boost::forward<Args>(args)...), m_head(::boost::forward<U>(u))
{}
template<typename... VValues>
tuple(const tuple<VValues...>& other)
: inherited(other.tail()), m_head(other.head())
{}
template<typename... VValues>
tuple& operator=(const tuple<VValues...>& other)
{
m_head = other.head();
tail() = other.tail();
return this;
}
typename add_reference<Head>::type head() { return m_head; }
typename add_reference<const Head>::type head() const { return m_head; }
inherited& tail() { return *this; }
const inherited& tail() const { return *this; }
protected:
Head m_head;
};
template<typename... Values>
tuple<Values&&...> forward_as_tuple_impl(Values&&... values)
{ return tuple<Values&&...>(::boost::forward<Values>(values)...); }
template<int I, typename Tuple>
struct tuple_element;
template<int I, typename Head, typename... Tail>
struct tuple_element<I, tuple<Head, Tail...> >
{
typedef typename tuple_element<I-1, tuple<Tail...> >::type type;
};
template<typename Head, typename... Tail>
struct tuple_element<0, tuple<Head, Tail...> >
{
typedef Head type;
};
template<int I, typename Tuple>
class get_impl;
template<int I, typename Head, typename... Values>
class get_impl<I, tuple<Head, Values...> >
{
typedef typename tuple_element<I-1, tuple<Values...> >::type Element;
typedef get_impl<I-1, tuple<Values...> > Next;
public:
typedef typename add_reference<Element>::type type;
typedef typename add_const_reference<Element>::type const_type;
static type get(tuple<Head, Values...>& t) { return Next::get(t.tail()); }
static const_type get(const tuple<Head, Values...>& t) { return Next::get(t.tail()); }
};
template<typename Head, typename... Values>
class get_impl<0, tuple<Head, Values...> >
{
public:
typedef typename add_reference<Head>::type type;
typedef typename add_const_reference<Head>::type const_type;
static type get(tuple<Head, Values...>& t) { return t.head(); }
static const_type get(const tuple<Head, Values...>& t){ return t.head(); }
};
template<int I, typename... Values>
typename get_impl<I, tuple<Values...> >::type get(tuple<Values...>& t)
{ return get_impl<I, tuple<Values...> >::get(t); }
template<int I, typename... Values>
typename get_impl<I, tuple<Values...> >::const_type get(const tuple<Values...>& t)
{ return get_impl<I, tuple<Values...> >::get(t); }
template<std::size_t...> struct index_tuple{ typedef index_tuple type; };
template<class S1, class S2> struct concat_index_tuple;
template<std::size_t... I1, std::size_t... I2>
struct concat_index_tuple<index_tuple<I1...>, index_tuple<I2...>>
: index_tuple<I1..., (sizeof...(I1)+I2)...>{};
template<std::size_t N> struct build_number_seq;
template<std::size_t N>
struct build_number_seq
: concat_index_tuple<typename build_number_seq<N/2>::type
,typename build_number_seq<N - N/2 >::type
>::type
{};
template<> struct build_number_seq<0> : index_tuple<>{};
template<> struct build_number_seq<1> : index_tuple<0>{};
}}}
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/config_end.hpp" 1 3
# 162 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/variadic_templates_tools.hpp" 2 3
# 36 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/container/detail/pair.hpp" 2 3
# 1 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/adl_move_swap.hpp" 1 3
# 35 "/home/snek/code/yuzu/build/vcpkg_installed/x64-linux/include/boost/move/adl_move_swap.hpp" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 1 3
# 60 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/functexcept.h" 1 3
# 42 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/functexcept.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
void
__throw_bad_exception(void) __attribute__((__noreturn__));
void
__throw_bad_alloc(void) __attribute__((__noreturn__));
void
__throw_bad_array_new_length(void) __attribute__((__noreturn__));
void
__throw_bad_cast(void) __attribute__((__noreturn__,__cold__));
void
__throw_bad_typeid(void) __attribute__((__noreturn__,__cold__));
void
__throw_logic_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_domain_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_length_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__,__cold__))
__attribute__((__format__(__gnu_printf__, 1, 2)));
void
__throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_range_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_ios_failure(const char*) __attribute__((__noreturn__,__cold__));
void
__throw_ios_failure(const char*, int) __attribute__((__noreturn__,__cold__));
void
__throw_system_error(int) __attribute__((__noreturn__,__cold__));
void
__throw_future_error(int) __attribute__((__noreturn__,__cold__));
void
__throw_bad_function_call() __attribute__((__noreturn__,__cold__));
# 141 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/functexcept.h" 3
}
# 61 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 1 3
# 36 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
# 67 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
extern "C++" {
namespace std __attribute__ ((__visibility__ ("default")))
{
struct __true_type { };
struct __false_type { };
template<bool>
struct __truth_type
{ typedef __false_type __type; };
template<>
struct __truth_type<true>
{ typedef __true_type __type; };
template<class _Sp, class _Tp>
struct __traitor
{
enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
typedef typename __truth_type<__value>::__type __type;
};
template<typename, typename>
struct __are_same
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Tp>
struct __are_same<_Tp, _Tp>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_void
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_void<void>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_integer
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_integer<bool>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<signed char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<wchar_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char8_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char16_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<char32_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<short>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned short>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<int>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned int>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<long long>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_integer<unsigned long long>
{
enum { __value = 1 };
typedef __true_type __type;
};
# 272 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
__extension__ template<> struct __is_integer<__int128> { enum { __value = 1 }; typedef __true_type __type; }; __extension__ template<> struct __is_integer<unsigned __int128> { enum { __value = 1 }; typedef __true_type __type; };
# 289 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
template<typename _Tp>
struct __is_floating
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_floating<float>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_floating<double>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_floating<long double>
{
enum { __value = 1 };
typedef __true_type __type;
};
# 366 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
template<typename _Tp>
struct __is_pointer
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Tp>
struct __is_pointer<_Tp*>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_arithmetic
: public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
{ };
template<typename _Tp>
struct __is_scalar
: public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
{ };
template<typename _Tp>
struct __is_char
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_char<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_char<wchar_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename _Tp>
struct __is_byte
{
enum { __value = 0 };
typedef __false_type __type;
};
template<>
struct __is_byte<char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_byte<signed char>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_byte<unsigned char>
{
enum { __value = 1 };
typedef __true_type __type;
};
enum class byte : unsigned char;
template<>
struct __is_byte<byte>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<>
struct __is_byte<char8_t>
{
enum { __value = 1 };
typedef __true_type __type;
};
template<typename> struct iterator_traits;
template<typename _Tp>
struct __is_nonvolatile_trivially_copyable
{
enum { __value = __is_trivially_copyable(_Tp) };
};
template<typename _Tp>
struct __is_nonvolatile_trivially_copyable<volatile _Tp>
{
enum { __value = 0 };
};
template<typename _OutputIter, typename _InputIter>
struct __memcpyable
{
enum { __value = 0 };
};
template<typename _Tp>
struct __memcpyable<_Tp*, _Tp*>
: __is_nonvolatile_trivially_copyable<_Tp>
{ };
template<typename _Tp>
struct __memcpyable<_Tp*, const _Tp*>
: __is_nonvolatile_trivially_copyable<_Tp>
{ };
template<typename _Iter1, typename _Iter2>
struct __memcmpable
{
enum { __value = 0 };
};
template<typename _Tp>
struct __memcmpable<_Tp*, _Tp*>
: __is_nonvolatile_trivially_copyable<_Tp>
{ };
template<typename _Tp>
struct __memcmpable<const _Tp*, _Tp*>
: __is_nonvolatile_trivially_copyable<_Tp>
{ };
template<typename _Tp>
struct __memcmpable<_Tp*, const _Tp*>
: __is_nonvolatile_trivially_copyable<_Tp>
{ };
template<typename _Tp, bool _TreatAsBytes =
__is_byte<_Tp>::__value
>
struct __is_memcmp_ordered
{
static const bool __value = _Tp(-1) > _Tp(1);
};
template<typename _Tp>
struct __is_memcmp_ordered<_Tp, false>
{
static const bool __value = false;
};
template<typename _Tp, typename _Up, bool = sizeof(_Tp) == sizeof(_Up)>
struct __is_memcmp_ordered_with
{
static const bool __value = __is_memcmp_ordered<_Tp>::__value
&& __is_memcmp_ordered<_Up>::__value;
};
template<typename _Tp, typename _Up>
struct __is_memcmp_ordered_with<_Tp, _Up, false>
{
static const bool __value = false;
};
# 579 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/cpp_type_traits.h" 3
template<>
struct __is_memcmp_ordered_with<std::byte, std::byte, true>
{ static constexpr bool __value = true; };
template<typename _Tp, bool _SameSize>
struct __is_memcmp_ordered_with<_Tp, std::byte, _SameSize>
{ static constexpr bool __value = false; };
template<typename _Up, bool _SameSize>
struct __is_memcmp_ordered_with<std::byte, _Up, _SameSize>
{ static constexpr bool __value = false; };
template<typename _Tp>
struct __is_move_iterator
{
enum { __value = 0 };
typedef __false_type __type;
};
template<typename _Iterator>
constexpr
inline _Iterator
__miter_base(_Iterator __it)
{ return __it; }
}
}
# 62 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/type_traits.h" 1 3
# 33 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/type_traits.h" 3
extern "C++" {
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
template<bool, typename>
struct __enable_if
{ };
template<typename _Tp>
struct __enable_if<true, _Tp>
{ typedef _Tp __type; };
template<bool _Cond, typename _Iftrue, typename _Iffalse>
struct __conditional_type
{ typedef _Iftrue __type; };
template<typename _Iftrue, typename _Iffalse>
struct __conditional_type<false, _Iftrue, _Iffalse>
{ typedef _Iffalse __type; };
template<typename _Tp>
struct __add_unsigned
{
private:
typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
public:
typedef typename __if_type::__type __type;
};
template<>
struct __add_unsigned<char>
{ typedef unsigned char __type; };
template<>
struct __add_unsigned<signed char>
{ typedef unsigned char __type; };
template<>
struct __add_unsigned<short>
{ typedef unsigned short __type; };
template<>
struct __add_unsigned<int>
{ typedef unsigned int __type; };
template<>
struct __add_unsigned<long>
{ typedef unsigned long __type; };
template<>
struct __add_unsigned<long long>
{ typedef unsigned long long __type; };
template<>
struct __add_unsigned<bool>;
template<>
struct __add_unsigned<wchar_t>;
template<typename _Tp>
struct __remove_unsigned
{
private:
typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
public:
typedef typename __if_type::__type __type;
};
template<>
struct __remove_unsigned<char>
{ typedef signed char __type; };
template<>
struct __remove_unsigned<unsigned char>
{ typedef signed char __type; };
template<>
struct __remove_unsigned<unsigned short>
{ typedef short __type; };
template<>
struct __remove_unsigned<unsigned int>
{ typedef int __type; };
template<>
struct __remove_unsigned<unsigned long>
{ typedef long __type; };
template<>
struct __remove_unsigned<unsigned long long>
{ typedef long long __type; };
template<>
struct __remove_unsigned<bool>;
template<>
struct __remove_unsigned<wchar_t>;
template<typename _Type>
constexpr
inline bool
__is_null_pointer(_Type* __ptr)
{ return __ptr == 0; }
template<typename _Type>
constexpr
inline bool
__is_null_pointer(_Type)
{ return false; }
constexpr bool
__is_null_pointer(std::nullptr_t)
{ return true; }
template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
struct __promote
{ typedef double __type; };
template<typename _Tp>
struct __promote<_Tp, false>
{ };
template<>
struct __promote<long double>
{ typedef long double __type; };
template<>
struct __promote<double>
{ typedef double __type; };
template<>
struct __promote<float>
{ typedef float __type; };
# 225 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/type_traits.h" 3
template<typename... _Tp>
using __promoted_t = decltype((typename __promote<_Tp>::__type(0) + ...));
template<typename _Tp, typename _Up>
using __promote_2 = __promote<__promoted_t<_Tp, _Up>>;
template<typename _Tp, typename _Up, typename _Vp>
using __promote_3 = __promote<__promoted_t<_Tp, _Up, _Vp>>;
template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
using __promote_4 = __promote<__promoted_t<_Tp, _Up, _Vp, _Wp>>;
# 270 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/type_traits.h" 3
}
}
# 63 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 1 3
# 33 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 3
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 50 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 3
template<typename _Tp>
struct __is_integer_nonstrict
: public std::__is_integer<_Tp>
{
using std::__is_integer<_Tp>::__value;
enum { __width = __value ? sizeof(_Tp) * 8 : 0 };
};
template<typename _Value>
struct __numeric_traits_integer
{
static_assert(__is_integer_nonstrict<_Value>::__value,
"invalid specialization");
static const bool __is_signed = (_Value)(-1) < 0;
static const int __digits
= __is_integer_nonstrict<_Value>::__width - __is_signed;
static const _Value __max = __is_signed
? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1)
: ~(_Value)0;
static const _Value __min = __is_signed ? -__max - 1 : (_Value)0;
};
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__min;
template<typename _Value>
const _Value __numeric_traits_integer<_Value>::__max;
template<typename _Value>
const bool __numeric_traits_integer<_Value>::__is_signed;
template<typename _Value>
const int __numeric_traits_integer<_Value>::__digits;
# 137 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 3
template<typename _Tp>
using __int_traits = __numeric_traits_integer<_Tp>;
# 157 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 3
template<typename _Value>
struct __numeric_traits_floating
{
static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136);
static const bool __is_signed = true;
static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18);
static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
};
template<typename _Value>
const int __numeric_traits_floating<_Value>::__max_digits10;
template<typename _Value>
const bool __numeric_traits_floating<_Value>::__is_signed;
template<typename _Value>
const int __numeric_traits_floating<_Value>::__digits10;
template<typename _Value>
const int __numeric_traits_floating<_Value>::__max_exponent10;
template<typename _Value>
struct __numeric_traits
: public __numeric_traits_integer<_Value>
{ };
template<>
struct __numeric_traits<float>
: public __numeric_traits_floating<float>
{ };
template<>
struct __numeric_traits<double>
: public __numeric_traits_floating<double>
{ };
template<>
struct __numeric_traits<long double>
: public __numeric_traits_floating<long double>
{ };
# 239 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/ext/numeric_traits.h" 3
}
# 64 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 1 3
# 62 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/utility.h" 1 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/utility.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Tp>
struct tuple_size;
template<typename _Tp,
typename _Up = typename remove_cv<_Tp>::type,
typename = typename enable_if<is_same<_Tp, _Up>::value>::type,
size_t = tuple_size<_Tp>::value>
using __enable_if_has_tuple_size = _Tp;
template<typename _Tp>
struct tuple_size<const __enable_if_has_tuple_size<_Tp>>
: public tuple_size<_Tp> { };
template<typename _Tp>
struct tuple_size<volatile __enable_if_has_tuple_size<_Tp>>
: public tuple_size<_Tp> { };
template<typename _Tp>
struct tuple_size<const volatile __enable_if_has_tuple_size<_Tp>>
: public tuple_size<_Tp> { };
template<typename _Tp>
inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
template<size_t __i, typename _Tp>
struct tuple_element;
template<size_t __i, typename _Tp>
using __tuple_element_t = typename tuple_element<__i, _Tp>::type;
template<size_t __i, typename _Tp>
struct tuple_element<__i, const _Tp>
{
using type = const __tuple_element_t<__i, _Tp>;
};
template<size_t __i, typename _Tp>
struct tuple_element<__i, volatile _Tp>
{
using type = volatile __tuple_element_t<__i, _Tp>;
};
template<size_t __i, typename _Tp>
struct tuple_element<__i, const volatile _Tp>
{
using type = const volatile __tuple_element_t<__i, _Tp>;
};
template<typename _Tp, typename... _Types>
constexpr size_t
__find_uniq_type_in_pack()
{
constexpr size_t __sz = sizeof...(_Types);
constexpr bool __found[__sz] = { __is_same(_Tp, _Types) ... };
size_t __n = __sz;
for (size_t __i = 0; __i < __sz; ++__i)
{
if (__found[__i])
{
if (__n < __sz)
return __sz;
__n = __i;
}
}
return __n;
}
# 134 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/utility.h" 3
template<size_t __i, typename _Tp>
using tuple_element_t = typename tuple_element<__i, _Tp>::type;
template<size_t... _Indexes> struct _Index_tuple { };
template<size_t _Num>
struct _Build_index_tuple
{
template<typename, size_t... _Indices>
using _IdxTuple = _Index_tuple<_Indices...>;
using __type = __make_integer_seq<_IdxTuple, size_t, _Num>;
};
template<typename _Tp, _Tp... _Idx>
struct integer_sequence
{
static_assert(is_integral_v<_Tp>);
typedef _Tp value_type;
static constexpr size_t size() noexcept { return sizeof...(_Idx); }
};
template<typename _Tp, _Tp _Num>
using make_integer_sequence
= __make_integer_seq<integer_sequence, _Tp, _Num>;
template<size_t... _Idx>
using index_sequence = integer_sequence<size_t, _Idx...>;
template<size_t _Num>
using make_index_sequence = make_integer_sequence<size_t, _Num>;
template<typename... _Types>
using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
struct in_place_t {
explicit in_place_t() = default;
};
inline constexpr in_place_t in_place{};
template<typename _Tp> struct in_place_type_t
{
explicit in_place_type_t() = default;
};
template<typename _Tp>
inline constexpr in_place_type_t<_Tp> in_place_type{};
template<size_t _Idx> struct in_place_index_t
{
explicit in_place_index_t() = default;
};
template<size_t _Idx>
inline constexpr in_place_index_t<_Idx> in_place_index{};
template<typename>
inline constexpr bool __is_in_place_type_v = false;
template<typename _Tp>
inline constexpr bool __is_in_place_type_v<in_place_type_t<_Tp>> = true;
template<typename _Tp>
using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>;
template<typename>
inline constexpr bool __is_in_place_index_v = false;
template<size_t _Nm>
inline constexpr bool __is_in_place_index_v<in_place_index_t<_Nm>> = true;
template<size_t _Np, typename... _Types>
struct _Nth_type
{ using type = __type_pack_element<_Np, _Types...>; };
# 276 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/utility.h" 3
namespace ranges::__detail
{
template<typename _Range>
inline constexpr bool __is_subrange = false;
}
}
# 63 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/concepts" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/concepts" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 1 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/version.h" 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/concepts" 2 3
# 48 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/concepts" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace __detail
{
template<typename _Tp, typename _Up>
concept __same_as = std::is_same_v<_Tp, _Up>;
}
template<typename _Tp, typename _Up>
concept same_as
= __detail::__same_as<_Tp, _Up> && __detail::__same_as<_Up, _Tp>;
namespace __detail
{
template<typename _Tp, typename _Up>
concept __different_from
= !same_as<remove_cvref_t<_Tp>, remove_cvref_t<_Up>>;
}
template<typename _Derived, typename _Base>
concept derived_from = __is_base_of(_Base, _Derived)
&& is_convertible_v<const volatile _Derived*, const volatile _Base*>;
template<typename _From, typename _To>
concept convertible_to = is_convertible_v<_From, _To>
&& requires { static_cast<_To>(std::declval<_From>()); };
template<typename _Tp, typename _Up>
concept common_reference_with
= same_as<common_reference_t<_Tp, _Up>, common_reference_t<_Up, _Tp>>
&& convertible_to<_Tp, common_reference_t<_Tp, _Up>>
&& convertible_to<_Up, common_reference_t<_Tp, _Up>>;
template<typename _Tp, typename _Up>
concept common_with
= same_as<common_type_t<_Tp, _Up>, common_type_t<_Up, _Tp>>
&& requires {
static_cast<common_type_t<_Tp, _Up>>(std::declval<_Tp>());
static_cast<common_type_t<_Tp, _Up>>(std::declval<_Up>());
}
&& common_reference_with<add_lvalue_reference_t<const _Tp>,
add_lvalue_reference_t<const _Up>>
&& common_reference_with<add_lvalue_reference_t<common_type_t<_Tp, _Up>>,
common_reference_t<
add_lvalue_reference_t<const _Tp>,
add_lvalue_reference_t<const _Up>>>;
template<typename _Tp>
concept integral = is_integral_v<_Tp>;
template<typename _Tp>
concept signed_integral = integral<_Tp> && is_signed_v<_Tp>;
template<typename _Tp>
concept unsigned_integral = integral<_Tp> && !signed_integral<_Tp>;
template<typename _Tp>
concept floating_point = is_floating_point_v<_Tp>;
namespace __detail
{
template<typename _Tp>
using __cref = const remove_reference_t<_Tp>&;
template<typename _Tp>
concept __class_or_enum
= is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>;
template<typename _Tp>
constexpr bool __destructible_impl = false;
template<typename _Tp>
requires requires(_Tp& __t) { { __t.~_Tp() } noexcept; }
constexpr bool __destructible_impl<_Tp> = true;
template<typename _Tp>
constexpr bool __destructible = __destructible_impl<_Tp>;
template<typename _Tp>
constexpr bool __destructible<_Tp&> = true;
template<typename _Tp>
constexpr bool __destructible<_Tp&&> = true;
template<typename _Tp, size_t _Nm>
constexpr bool __destructible<_Tp[_Nm]> = __destructible<_Tp>;
}
template<typename _Lhs, typename _Rhs>
concept assignable_from
= is_lvalue_reference_v<_Lhs>
&& common_reference_with<__detail::__cref<_Lhs>, __detail::__cref<_Rhs>>
&& requires(_Lhs __lhs, _Rhs&& __rhs) {
{ __lhs = static_cast<_Rhs&&>(__rhs) } -> same_as<_Lhs>;
};
template<typename _Tp>
concept destructible = __detail::__destructible<_Tp>;
template<typename _Tp, typename... _Args>
concept constructible_from
= destructible<_Tp> && is_constructible_v<_Tp, _Args...>;
template<typename _Tp>
concept default_initializable = constructible_from<_Tp>
&& requires
{
_Tp{};
(void) ::new _Tp;
};
template<typename _Tp>
concept move_constructible
= constructible_from<_Tp, _Tp> && convertible_to<_Tp, _Tp>;
template<typename _Tp>
concept copy_constructible
= move_constructible<_Tp>
&& constructible_from<_Tp, _Tp&> && convertible_to<_Tp&, _Tp>
&& constructible_from<_Tp, const _Tp&> && convertible_to<const _Tp&, _Tp>
&& constructible_from<_Tp, const _Tp> && convertible_to<const _Tp, _Tp>;
namespace ranges
{
namespace __swap
{
template<typename _Tp> void swap(_Tp&, _Tp&) = delete;
template<typename _Tp, typename _Up>
concept __adl_swap
= (std::__detail::__class_or_enum<remove_reference_t<_Tp>>
|| std::__detail::__class_or_enum<remove_reference_t<_Up>>)
&& requires(_Tp&& __t, _Up&& __u) {
swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u));
};
struct _Swap
{
private:
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__adl_swap<_Tp, _Up>)
return noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()));
else
return is_nothrow_move_constructible_v<remove_reference_t<_Tp>>
&& is_nothrow_move_assignable_v<remove_reference_t<_Tp>>;
}
public:
template<typename _Tp, typename _Up>
requires __adl_swap<_Tp, _Up>
|| (same_as<_Tp, _Up> && is_lvalue_reference_v<_Tp>
&& move_constructible<remove_reference_t<_Tp>>
&& assignable_from<_Tp, remove_reference_t<_Tp>>)
constexpr void
operator()(_Tp&& __t, _Up&& __u) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__adl_swap<_Tp, _Up>)
swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u));
else
{
auto __tmp = static_cast<remove_reference_t<_Tp>&&>(__t);
__t = static_cast<remove_reference_t<_Tp>&&>(__u);
__u = static_cast<remove_reference_t<_Tp>&&>(__tmp);
}
}
template<typename _Tp, typename _Up, size_t _Num>
requires requires(const _Swap& __swap, _Tp& __e1, _Up& __e2) {
__swap(__e1, __e2);
}
constexpr void
operator()(_Tp (&__e1)[_Num], _Up (&__e2)[_Num]) const
noexcept(noexcept(std::declval<const _Swap&>()(*__e1, *__e2)))
{
for (size_t __n = 0; __n < _Num; ++__n)
(*this)(__e1[__n], __e2[__n]);
}
};
}
inline namespace _Cpo {
inline constexpr __swap::_Swap swap{};
}
}
template<typename _Tp>
concept swappable
= requires(_Tp& __a, _Tp& __b) { ranges::swap(__a, __b); };
template<typename _Tp, typename _Up>
concept swappable_with = common_reference_with<_Tp, _Up>
&& requires(_Tp&& __t, _Up&& __u) {
ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Tp&&>(__t));
ranges::swap(static_cast<_Up&&>(__u), static_cast<_Up&&>(__u));
ranges::swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u));
ranges::swap(static_cast<_Up&&>(__u), static_cast<_Tp&&>(__t));
};
template<typename _Tp>
concept movable = is_object_v<_Tp> && move_constructible<_Tp>
&& assignable_from<_Tp&, _Tp> && swappable<_Tp>;
template<typename _Tp>
concept copyable = copy_constructible<_Tp> && movable<_Tp>
&& assignable_from<_Tp&, _Tp&> && assignable_from<_Tp&, const _Tp&>
&& assignable_from<_Tp&, const _Tp>;
template<typename _Tp>
concept semiregular = copyable<_Tp> && default_initializable<_Tp>;
namespace __detail
{
template<typename _Tp>
concept __boolean_testable_impl = convertible_to<_Tp, bool>;
template<typename _Tp>
concept __boolean_testable
= __boolean_testable_impl<_Tp>
&& requires(_Tp&& __t)
{ { !static_cast<_Tp&&>(__t) } -> __boolean_testable_impl; };
}
namespace __detail
{
template<typename _Tp, typename _Up>
concept __weakly_eq_cmp_with
= requires(__detail::__cref<_Tp> __t, __detail::__cref<_Up> __u) {
{ __t == __u } -> __boolean_testable;
{ __t != __u } -> __boolean_testable;
{ __u == __t } -> __boolean_testable;
{ __u != __t } -> __boolean_testable;
};
}
template<typename _Tp>
concept equality_comparable = __detail::__weakly_eq_cmp_with<_Tp, _Tp>;
template<typename _Tp, typename _Up>
concept equality_comparable_with
= equality_comparable<_Tp> && equality_comparable<_Up>
&& common_reference_with<__detail::__cref<_Tp>, __detail::__cref<_Up>>
&& equality_comparable<common_reference_t<__detail::__cref<_Tp>,
__detail::__cref<_Up>>>
&& __detail::__weakly_eq_cmp_with<_Tp, _Up>;
namespace __detail
{
template<typename _Tp, typename _Up>
concept __partially_ordered_with
= requires(const remove_reference_t<_Tp>& __t,
const remove_reference_t<_Up>& __u) {
{ __t < __u } -> __boolean_testable;
{ __t > __u } -> __boolean_testable;
{ __t <= __u } -> __boolean_testable;
{ __t >= __u } -> __boolean_testable;
{ __u < __t } -> __boolean_testable;
{ __u > __t } -> __boolean_testable;
{ __u <= __t } -> __boolean_testable;
{ __u >= __t } -> __boolean_testable;
};
}
template<typename _Tp>
concept totally_ordered
= equality_comparable<_Tp>
&& __detail::__partially_ordered_with<_Tp, _Tp>;
template<typename _Tp, typename _Up>
concept totally_ordered_with
= totally_ordered<_Tp> && totally_ordered<_Up>
&& equality_comparable_with<_Tp, _Up>
&& totally_ordered<common_reference_t<__detail::__cref<_Tp>,
__detail::__cref<_Up>>>
&& __detail::__partially_ordered_with<_Tp, _Up>;
template<typename _Tp>
concept regular = semiregular<_Tp> && equality_comparable<_Tp>;
template<typename _Fn, typename... _Args>
concept invocable = is_invocable_v<_Fn, _Args...>;
template<typename _Fn, typename... _Args>
concept regular_invocable = invocable<_Fn, _Args...>;
template<typename _Fn, typename... _Args>
concept predicate = regular_invocable<_Fn, _Args...>
&& __detail::__boolean_testable<invoke_result_t<_Fn, _Args...>>;
template<typename _Rel, typename _Tp, typename _Up>
concept relation
= predicate<_Rel, _Tp, _Tp> && predicate<_Rel, _Up, _Up>
&& predicate<_Rel, _Tp, _Up> && predicate<_Rel, _Up, _Tp>;
template<typename _Rel, typename _Tp, typename _Up>
concept equivalence_relation = relation<_Rel, _Tp, _Up>;
template<typename _Rel, typename _Tp, typename _Up>
concept strict_weak_order = relation<_Rel, _Tp, _Up>;
}
# 41 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
namespace __cmp_cat
{
using type = signed char;
enum class _Ord : type { equivalent = 0, less = -1, greater = 1 };
enum class _Ncmp : type { _Unordered = 2 };
struct __unspec
{
consteval __unspec(__unspec*) noexcept { }
};
}
class partial_ordering
{
__cmp_cat::type _M_value;
constexpr explicit
partial_ordering(__cmp_cat::_Ord __v) noexcept
: _M_value(__cmp_cat::type(__v))
{ }
constexpr explicit
partial_ordering(__cmp_cat::_Ncmp __v) noexcept
: _M_value(__cmp_cat::type(__v))
{ }
friend class weak_ordering;
friend class strong_ordering;
public:
static const partial_ordering less;
static const partial_ordering equivalent;
static const partial_ordering greater;
static const partial_ordering unordered;
[[nodiscard]]
friend constexpr bool
operator==(partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value == 0; }
[[nodiscard]]
friend constexpr bool
operator==(partial_ordering, partial_ordering) noexcept = default;
[[nodiscard]]
friend constexpr bool
operator< (partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value == -1; }
[[nodiscard]]
friend constexpr bool
operator> (partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value == 1; }
[[nodiscard]]
friend constexpr bool
operator<=(partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value <= 0; }
[[nodiscard]]
friend constexpr bool
operator>=(partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __cmp_cat::type(__v._M_value & 1) == __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator< (__cmp_cat::__unspec, partial_ordering __v) noexcept
{ return __v._M_value == 1; }
[[nodiscard]]
friend constexpr bool
operator> (__cmp_cat::__unspec, partial_ordering __v) noexcept
{ return __v._M_value == -1; }
[[nodiscard]]
friend constexpr bool
operator<=(__cmp_cat::__unspec, partial_ordering __v) noexcept
{ return __cmp_cat::type(__v._M_value & 1) == __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator>=(__cmp_cat::__unspec, partial_ordering __v) noexcept
{ return 0 >= __v._M_value; }
[[nodiscard]]
friend constexpr partial_ordering
operator<=>(partial_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v; }
[[nodiscard]]
friend constexpr partial_ordering
operator<=>(__cmp_cat::__unspec, partial_ordering __v) noexcept
{
if (__v._M_value & 1)
return partial_ordering(__cmp_cat::_Ord(-__v._M_value));
else
return __v;
}
};
inline constexpr partial_ordering
partial_ordering::less(__cmp_cat::_Ord::less);
inline constexpr partial_ordering
partial_ordering::equivalent(__cmp_cat::_Ord::equivalent);
inline constexpr partial_ordering
partial_ordering::greater(__cmp_cat::_Ord::greater);
inline constexpr partial_ordering
partial_ordering::unordered(__cmp_cat::_Ncmp::_Unordered);
class weak_ordering
{
__cmp_cat::type _M_value;
constexpr explicit
weak_ordering(__cmp_cat::_Ord __v) noexcept : _M_value(__cmp_cat::type(__v))
{ }
friend class strong_ordering;
public:
static const weak_ordering less;
static const weak_ordering equivalent;
static const weak_ordering greater;
[[nodiscard]]
constexpr operator partial_ordering() const noexcept
{ return partial_ordering(__cmp_cat::_Ord(_M_value)); }
[[nodiscard]]
friend constexpr bool
operator==(weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value == 0; }
[[nodiscard]]
friend constexpr bool
operator==(weak_ordering, weak_ordering) noexcept = default;
[[nodiscard]]
friend constexpr bool
operator< (weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value < 0; }
[[nodiscard]]
friend constexpr bool
operator> (weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value > 0; }
[[nodiscard]]
friend constexpr bool
operator<=(weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value <= 0; }
[[nodiscard]]
friend constexpr bool
operator>=(weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value >= 0; }
[[nodiscard]]
friend constexpr bool
operator< (__cmp_cat::__unspec, weak_ordering __v) noexcept
{ return 0 < __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator> (__cmp_cat::__unspec, weak_ordering __v) noexcept
{ return 0 > __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator<=(__cmp_cat::__unspec, weak_ordering __v) noexcept
{ return 0 <= __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator>=(__cmp_cat::__unspec, weak_ordering __v) noexcept
{ return 0 >= __v._M_value; }
[[nodiscard]]
friend constexpr weak_ordering
operator<=>(weak_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v; }
[[nodiscard]]
friend constexpr weak_ordering
operator<=>(__cmp_cat::__unspec, weak_ordering __v) noexcept
{ return weak_ordering(__cmp_cat::_Ord(-__v._M_value)); }
};
inline constexpr weak_ordering
weak_ordering::less(__cmp_cat::_Ord::less);
inline constexpr weak_ordering
weak_ordering::equivalent(__cmp_cat::_Ord::equivalent);
inline constexpr weak_ordering
weak_ordering::greater(__cmp_cat::_Ord::greater);
class strong_ordering
{
__cmp_cat::type _M_value;
constexpr explicit
strong_ordering(__cmp_cat::_Ord __v) noexcept
: _M_value(__cmp_cat::type(__v))
{ }
public:
static const strong_ordering less;
static const strong_ordering equal;
static const strong_ordering equivalent;
static const strong_ordering greater;
[[nodiscard]]
constexpr operator partial_ordering() const noexcept
{ return partial_ordering(__cmp_cat::_Ord(_M_value)); }
[[nodiscard]]
constexpr operator weak_ordering() const noexcept
{ return weak_ordering(__cmp_cat::_Ord(_M_value)); }
[[nodiscard]]
friend constexpr bool
operator==(strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value == 0; }
[[nodiscard]]
friend constexpr bool
operator==(strong_ordering, strong_ordering) noexcept = default;
[[nodiscard]]
friend constexpr bool
operator< (strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value < 0; }
[[nodiscard]]
friend constexpr bool
operator> (strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value > 0; }
[[nodiscard]]
friend constexpr bool
operator<=(strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value <= 0; }
[[nodiscard]]
friend constexpr bool
operator>=(strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v._M_value >= 0; }
[[nodiscard]]
friend constexpr bool
operator< (__cmp_cat::__unspec, strong_ordering __v) noexcept
{ return 0 < __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator> (__cmp_cat::__unspec, strong_ordering __v) noexcept
{ return 0 > __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator<=(__cmp_cat::__unspec, strong_ordering __v) noexcept
{ return 0 <= __v._M_value; }
[[nodiscard]]
friend constexpr bool
operator>=(__cmp_cat::__unspec, strong_ordering __v) noexcept
{ return 0 >= __v._M_value; }
[[nodiscard]]
friend constexpr strong_ordering
operator<=>(strong_ordering __v, __cmp_cat::__unspec) noexcept
{ return __v; }
[[nodiscard]]
friend constexpr strong_ordering
operator<=>(__cmp_cat::__unspec, strong_ordering __v) noexcept
{ return strong_ordering(__cmp_cat::_Ord(-__v._M_value)); }
};
inline constexpr strong_ordering
strong_ordering::less(__cmp_cat::_Ord::less);
inline constexpr strong_ordering
strong_ordering::equal(__cmp_cat::_Ord::equivalent);
inline constexpr strong_ordering
strong_ordering::equivalent(__cmp_cat::_Ord::equivalent);
inline constexpr strong_ordering
strong_ordering::greater(__cmp_cat::_Ord::greater);
[[nodiscard]]
constexpr bool
is_eq(partial_ordering __cmp) noexcept
{ return __cmp == 0; }
[[nodiscard]]
constexpr bool
is_neq(partial_ordering __cmp) noexcept
{ return __cmp != 0; }
[[nodiscard]]
constexpr bool
is_lt (partial_ordering __cmp) noexcept
{ return __cmp < 0; }
[[nodiscard]]
constexpr bool
is_lteq(partial_ordering __cmp) noexcept
{ return __cmp <= 0; }
[[nodiscard]]
constexpr bool
is_gt (partial_ordering __cmp) noexcept
{ return __cmp > 0; }
[[nodiscard]]
constexpr bool
is_gteq(partial_ordering __cmp) noexcept
{ return __cmp >= 0; }
namespace __detail
{
template<typename _Tp>
inline constexpr unsigned __cmp_cat_id = 1;
template<>
inline constexpr unsigned __cmp_cat_id<partial_ordering> = 2;
template<>
inline constexpr unsigned __cmp_cat_id<weak_ordering> = 4;
template<>
inline constexpr unsigned __cmp_cat_id<strong_ordering> = 8;
template<typename... _Ts>
constexpr auto __common_cmp_cat()
{
constexpr unsigned __cats = (__cmp_cat_id<_Ts> | ...);
if constexpr (__cats & 1)
return;
else if constexpr (bool(__cats & __cmp_cat_id<partial_ordering>))
return partial_ordering::equivalent;
else if constexpr (bool(__cats & __cmp_cat_id<weak_ordering>))
return weak_ordering::equivalent;
else
return strong_ordering::equivalent;
}
}
template<typename... _Ts>
struct common_comparison_category
{
using type = decltype(__detail::__common_cmp_cat<_Ts...>());
};
template<typename _Tp>
struct common_comparison_category<_Tp>
{ using type = void; };
template<>
struct common_comparison_category<partial_ordering>
{ using type = partial_ordering; };
template<>
struct common_comparison_category<weak_ordering>
{ using type = weak_ordering; };
template<>
struct common_comparison_category<strong_ordering>
{ using type = strong_ordering; };
template<>
struct common_comparison_category<>
{ using type = strong_ordering; };
template<typename... _Ts>
using common_comparison_category_t
= typename common_comparison_category<_Ts...>::type;
namespace __detail
{
template<typename _Tp, typename _Cat>
concept __compares_as
= same_as<common_comparison_category_t<_Tp, _Cat>, _Cat>;
}
template<typename _Tp, typename _Cat = partial_ordering>
concept three_way_comparable
= __detail::__weakly_eq_cmp_with<_Tp, _Tp>
&& __detail::__partially_ordered_with<_Tp, _Tp>
&& requires(const remove_reference_t<_Tp>& __a,
const remove_reference_t<_Tp>& __b)
{
{ __a <=> __b } -> __detail::__compares_as<_Cat>;
};
template<typename _Tp, typename _Up, typename _Cat = partial_ordering>
concept three_way_comparable_with
= three_way_comparable<_Tp, _Cat>
&& three_way_comparable<_Up, _Cat>
&& common_reference_with<const remove_reference_t<_Tp>&,
const remove_reference_t<_Up>&>
&& three_way_comparable<
common_reference_t<const remove_reference_t<_Tp>&,
const remove_reference_t<_Up>&>, _Cat>
&& __detail::__weakly_eq_cmp_with<_Tp, _Up>
&& __detail::__partially_ordered_with<_Tp, _Up>
&& requires(const remove_reference_t<_Tp>& __t,
const remove_reference_t<_Up>& __u)
{
{ __t <=> __u } -> __detail::__compares_as<_Cat>;
{ __u <=> __t } -> __detail::__compares_as<_Cat>;
};
namespace __detail
{
template<typename _Tp, typename _Up>
using __cmp3way_res_t
= decltype(std::declval<_Tp>() <=> std::declval<_Up>());
template<typename _Tp, typename _Up>
struct __cmp3way_res_impl
{ };
template<typename _Tp, typename _Up>
requires requires { typename __cmp3way_res_t<__cref<_Tp>, __cref<_Up>>; }
struct __cmp3way_res_impl<_Tp, _Up>
{
using type = __cmp3way_res_t<__cref<_Tp>, __cref<_Up>>;
};
}
template<typename _Tp, typename _Up = _Tp>
struct compare_three_way_result
: __detail::__cmp3way_res_impl<_Tp, _Up>
{ };
template<typename _Tp, typename _Up = _Tp>
using compare_three_way_result_t
= typename __detail::__cmp3way_res_impl<_Tp, _Up>::type;
namespace __detail
{
template<typename _Tp, typename _Up>
concept __3way_builtin_ptr_cmp
= requires(_Tp&& __t, _Up&& __u)
{ static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u); }
&& convertible_to<_Tp, const volatile void*>
&& convertible_to<_Up, const volatile void*>
&& ! requires(_Tp&& __t, _Up&& __u)
{ operator<=>(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)); }
&& ! requires(_Tp&& __t, _Up&& __u)
{ static_cast<_Tp&&>(__t).operator<=>(static_cast<_Up&&>(__u)); };
}
struct compare_three_way
{
template<typename _Tp, typename _Up>
requires three_way_comparable_with<_Tp, _Up>
constexpr auto
operator() [[nodiscard]] (_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Tp>() <=> std::declval<_Up>()))
{
if constexpr (__detail::__3way_builtin_ptr_cmp<_Tp, _Up>)
{
auto __pt = static_cast<const volatile void*>(__t);
auto __pu = static_cast<const volatile void*>(__u);
if (std::__is_constant_evaluated())
return __pt <=> __pu;
auto __it = reinterpret_cast<long unsigned int>(__pt);
auto __iu = reinterpret_cast<long unsigned int>(__pu);
return __it <=> __iu;
}
else
return static_cast<_Tp&&>(__t) <=> static_cast<_Up&&>(__u);
}
using is_transparent = void;
};
namespace __compare
{
template<floating_point _Tp>
constexpr weak_ordering
__fp_weak_ordering(_Tp __e, _Tp __f)
{
auto __cat = [](_Tp __fp) -> int {
const int __sign = __builtin_signbit(__fp) ? -1 : 1;
if (__builtin_isnormal(__fp))
return (__fp == 0 ? 1 : 3) * __sign;
if (__builtin_isnan(__fp))
return 5 * __sign;
if (int __inf = __builtin_isinf_sign(__fp))
return 4 * __inf;
return 2 * __sign;
};
auto __po = __e <=> __f;
if (is_lt(__po))
return weak_ordering::less;
else if (is_gt(__po))
return weak_ordering::greater;
else if (__po == partial_ordering::equivalent)
return weak_ordering::equivalent;
else
{
auto __isnan_sign = [](_Tp __fp) -> int {
return __builtin_isnan(__fp)
? __builtin_signbit(__fp) ? -1 : 1
: 0;
};
auto __ord = __isnan_sign(__e) <=> __isnan_sign(__f);
if (is_eq(__ord))
return weak_ordering::equivalent;
else if (is_lt(__ord))
return weak_ordering::less;
else
return weak_ordering::greater;
}
}
void strong_order() = delete;
template<typename _Tp, typename _Up>
concept __adl_strong = requires(_Tp&& __t, _Up&& __u)
{
strong_ordering(strong_order(static_cast<_Tp&&>(__t),
static_cast<_Up&&>(__u)));
};
void weak_order() = delete;
template<typename _Tp, typename _Up>
concept __adl_weak = requires(_Tp&& __t, _Up&& __u)
{
weak_ordering(weak_order(static_cast<_Tp&&>(__t),
static_cast<_Up&&>(__u)));
};
void partial_order() = delete;
template<typename _Tp, typename _Up>
concept __adl_partial = requires(_Tp&& __t, _Up&& __u)
{
partial_ordering(partial_order(static_cast<_Tp&&>(__t),
static_cast<_Up&&>(__u)));
};
template<typename _Ord, typename _Tp, typename _Up>
concept __cmp3way = requires(_Tp&& __t, _Up&& __u, compare_three_way __c)
{
_Ord(__c(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u)));
};
template<typename _Tp, typename _Up>
concept __strongly_ordered
= __adl_strong<_Tp, _Up>
|| floating_point<remove_reference_t<_Tp>>
|| __cmp3way<strong_ordering, _Tp, _Up>;
template<typename _Tp, typename _Up>
concept __decayed_same_as = same_as<decay_t<_Tp>, decay_t<_Up>>;
class _Strong_order
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (floating_point<decay_t<_Tp>>)
return true;
else if constexpr (__adl_strong<_Tp, _Up>)
return noexcept(strong_ordering(strong_order(std::declval<_Tp>(),
std::declval<_Up>())));
else if constexpr (__cmp3way<strong_ordering, _Tp, _Up>)
return noexcept(compare_three_way()(std::declval<_Tp>(),
std::declval<_Up>()));
}
friend class _Weak_order;
friend class _Strong_fallback;
enum class _Fp_fmt
{
_Binary16, _Binary32, _Binary64, _Binary128,
_X86_80bit,
_M68k_80bit,
_Dbldbl,
_Bfloat16,
};
# 699 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
template<typename _Tp>
static consteval _Fp_fmt
_S_fp_fmt() noexcept
{
using enum _Fp_fmt;
# 719 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
if constexpr (__is_same(_Tp, long double))
return (-16381) == -16381 ? _X86_80bit : _M68k_80bit;
# 731 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
constexpr int __width = sizeof(_Tp) * 8;
if constexpr (__width == 16)
return _Binary16;
else if constexpr (__width == 32)
return _Binary32;
else if constexpr (__width == 64)
return _Binary64;
else if constexpr (__width == 128)
return _Binary128;
}
using int64_t = long int;
using int32_t = int;
using int16_t = short;
using uint64_t = long unsigned int;
using uint16_t = unsigned short;
template<typename _Tp>
struct _Int
{
uint64_t _M_lo;
_Tp _M_hi;
constexpr explicit
_Int(_Tp __hi, uint64_t __lo) noexcept : _M_hi(__hi)
{ _M_lo = __lo; }
constexpr explicit
_Int(uint64_t __lo) noexcept : _M_hi(0)
{ _M_lo = __lo; }
constexpr bool operator==(const _Int&) const = default;
# 781 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
constexpr _Int&
operator^=(const _Int& __rhs) noexcept
{
_M_hi ^= __rhs._M_hi;
_M_lo ^= __rhs._M_lo;
return *this;
}
constexpr strong_ordering
operator<=>(const _Int& __rhs) const noexcept
{
strong_ordering __cmp = _M_hi <=> __rhs._M_hi;
if (__cmp != strong_ordering::equal)
return __cmp;
return _M_lo <=> __rhs._M_lo;
}
};
template<typename _Tp>
static constexpr _Tp
_S_compl(_Tp __t) noexcept
{
constexpr int __width = sizeof(_Tp) * 8;
make_unsigned_t<_Tp> __sign = __t >> (__width - 1);
return __t ^ (__sign >> 1);
}
template<typename _Tp>
static constexpr _Int<_Tp>
_S_compl(_Int<_Tp> __t) noexcept
{
constexpr int __width = sizeof(_Tp) * 8;
make_unsigned_t<_Tp> __sign = __t._M_hi >> (__width - 1);
__t._M_hi ^= (__sign >> 1 );
uint64_t __sign64 = (_Tp)__sign;
__t._M_lo ^= __sign64;
return __t;
}
template<typename _Tp>
constexpr static auto
_S_fp_bits(_Tp __val) noexcept
{
if constexpr (sizeof(_Tp) == sizeof(int64_t))
return __builtin_bit_cast(int64_t, __val);
else if constexpr (sizeof(_Tp) == sizeof(int32_t))
return __builtin_bit_cast(int32_t, __val);
else if constexpr (sizeof(_Tp) == sizeof(int16_t))
return __builtin_bit_cast(int16_t, __val);
else
{
using enum _Fp_fmt;
constexpr auto __fmt = _S_fp_fmt<_Tp>();
if constexpr (__fmt == _X86_80bit || __fmt == _M68k_80bit)
{
if constexpr (sizeof(_Tp) == 3 * sizeof(int32_t))
{
auto __ival = __builtin_bit_cast(_Int<int32_t>, __val);
return _Int<int16_t>(__ival._M_hi, __ival._M_lo);
}
else
{
auto __ival = __builtin_bit_cast(_Int<int64_t>, __val);
return _Int<int16_t>(__ival._M_hi, __ival._M_lo);
}
}
else if constexpr (sizeof(_Tp) == 2 * sizeof(int64_t))
{
return __builtin_bit_cast(__int128, __val);
}
else
static_assert(sizeof(_Tp) == sizeof(int64_t),
"unsupported floating-point type");
}
}
template<typename _Tp>
static constexpr strong_ordering
_S_fp_cmp(_Tp __x, _Tp __y) noexcept
{
# 885 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
auto __ix = _S_fp_bits(__x);
auto __iy = _S_fp_bits(__y);
if (__ix == __iy)
return strong_ordering::equal;
using enum _Fp_fmt;
constexpr auto __fmt = _S_fp_fmt<_Tp>();
if constexpr (__fmt == _Dbldbl)
{
struct _Unpacked { double _M_hi; int64_t _M_lo; };
auto __x2 = __builtin_bit_cast(_Unpacked, __x);
auto __y2 = __builtin_bit_cast(_Unpacked, __y);
auto __cmp = _S_fp_cmp(__x2._M_hi, __y2._M_hi);
if (__cmp != strong_ordering::equal)
return __cmp;
if (__builtin_isnan(__x2._M_hi))
return strong_ordering::equal;
if (((__x2._M_lo | __y2._M_lo) & 0x7fffffffffffffffULL) == 0)
return strong_ordering::equal;
return _S_compl(__x2._M_lo) <=> _S_compl(__y2._M_lo);
}
else
{
if constexpr (__fmt == _M68k_80bit)
{
constexpr uint16_t __maxexp = 0x7fff;
if ((__ix._M_hi & __maxexp) == __maxexp)
__ix._M_lo |= 1ull << 63;
if ((__iy._M_hi & __maxexp) == __maxexp)
__iy._M_lo |= 1ull << 63;
}
else
{
# 952 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/compare" 3
}
return _S_compl(__ix) <=> _S_compl(__iy);
}
}
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __strongly_ordered<_Tp, _Up>
constexpr strong_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (floating_point<decay_t<_Tp>>)
return _S_fp_cmp(__e, __f);
else if constexpr (__adl_strong<_Tp, _Up>)
return strong_ordering(strong_order(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f)));
else if constexpr (__cmp3way<strong_ordering, _Tp, _Up>)
return compare_three_way()(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
}
};
template<typename _Tp, typename _Up>
concept __weakly_ordered
= floating_point<remove_reference_t<_Tp>>
|| __adl_weak<_Tp, _Up>
|| __cmp3way<weak_ordering, _Tp, _Up>
|| __strongly_ordered<_Tp, _Up>;
class _Weak_order
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (floating_point<decay_t<_Tp>>)
return true;
else if constexpr (__adl_weak<_Tp, _Up>)
return noexcept(weak_ordering(weak_order(std::declval<_Tp>(),
std::declval<_Up>())));
else if constexpr (__cmp3way<weak_ordering, _Tp, _Up>)
return noexcept(compare_three_way()(std::declval<_Tp>(),
std::declval<_Up>()));
else if constexpr (__strongly_ordered<_Tp, _Up>)
return _Strong_order::_S_noexcept<_Tp, _Up>();
}
friend class _Partial_order;
friend class _Weak_fallback;
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __weakly_ordered<_Tp, _Up>
constexpr weak_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (floating_point<decay_t<_Tp>>)
return __compare::__fp_weak_ordering(__e, __f);
else if constexpr (__adl_weak<_Tp, _Up>)
return weak_ordering(weak_order(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f)));
else if constexpr (__cmp3way<weak_ordering, _Tp, _Up>)
return compare_three_way()(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
else if constexpr (__strongly_ordered<_Tp, _Up>)
return _Strong_order{}(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
}
};
template<typename _Tp, typename _Up>
concept __partially_ordered
= __adl_partial<_Tp, _Up>
|| __cmp3way<partial_ordering, _Tp, _Up>
|| __weakly_ordered<_Tp, _Up>;
class _Partial_order
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__adl_partial<_Tp, _Up>)
return noexcept(partial_ordering(partial_order(std::declval<_Tp>(),
std::declval<_Up>())));
else if constexpr (__cmp3way<partial_ordering, _Tp, _Up>)
return noexcept(compare_three_way()(std::declval<_Tp>(),
std::declval<_Up>()));
else if constexpr (__weakly_ordered<_Tp, _Up>)
return _Weak_order::_S_noexcept<_Tp, _Up>();
}
friend class _Partial_fallback;
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __partially_ordered<_Tp, _Up>
constexpr partial_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__adl_partial<_Tp, _Up>)
return partial_ordering(partial_order(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f)));
else if constexpr (__cmp3way<partial_ordering, _Tp, _Up>)
return compare_three_way()(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
else if constexpr (__weakly_ordered<_Tp, _Up>)
return _Weak_order{}(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
}
};
template<typename _Tp, typename _Up>
concept __op_eq_lt = requires(_Tp&& __t, _Up&& __u)
{
{ static_cast<_Tp&&>(__t) == static_cast<_Up&&>(__u) }
-> convertible_to<bool>;
{ static_cast<_Tp&&>(__t) < static_cast<_Up&&>(__u) }
-> convertible_to<bool>;
};
class _Strong_fallback
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__strongly_ordered<_Tp, _Up>)
return _Strong_order::_S_noexcept<_Tp, _Up>();
else
return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>()))
&& noexcept(bool(std::declval<_Tp>() < std::declval<_Up>()));
}
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __strongly_ordered<_Tp, _Up> || __op_eq_lt<_Tp, _Up>
constexpr strong_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__strongly_ordered<_Tp, _Up>)
return _Strong_order{}(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
else
return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f)
? strong_ordering::equal
: static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f)
? strong_ordering::less
: strong_ordering::greater;
}
};
class _Weak_fallback
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__weakly_ordered<_Tp, _Up>)
return _Weak_order::_S_noexcept<_Tp, _Up>();
else
return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>()))
&& noexcept(bool(std::declval<_Tp>() < std::declval<_Up>()));
}
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __weakly_ordered<_Tp, _Up> || __op_eq_lt<_Tp, _Up>
constexpr weak_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__weakly_ordered<_Tp, _Up>)
return _Weak_order{}(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
else
return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f)
? weak_ordering::equivalent
: static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f)
? weak_ordering::less
: weak_ordering::greater;
}
};
template<typename _Tp, typename _Up>
concept __op_eq_lt_lt = __op_eq_lt<_Tp, _Up>
&& requires(_Tp&& __t, _Up&& __u)
{
{ static_cast<_Up&&>(__u) < static_cast<_Tp&&>(__t) }
-> convertible_to<bool>;
};
class _Partial_fallback
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__partially_ordered<_Tp, _Up>)
return _Partial_order::_S_noexcept<_Tp, _Up>();
else
return noexcept(bool(std::declval<_Tp>() == std::declval<_Up>()))
&& noexcept(bool(std::declval<_Tp>() < std::declval<_Up>()));
}
public:
template<typename _Tp, __decayed_same_as<_Tp> _Up>
requires __partially_ordered<_Tp, _Up> || __op_eq_lt_lt<_Tp, _Up>
constexpr partial_ordering
operator() [[nodiscard]] (_Tp&& __e, _Up&& __f) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__partially_ordered<_Tp, _Up>)
return _Partial_order{}(static_cast<_Tp&&>(__e),
static_cast<_Up&&>(__f));
else
return static_cast<_Tp&&>(__e) == static_cast<_Up&&>(__f)
? partial_ordering::equivalent
: static_cast<_Tp&&>(__e) < static_cast<_Up&&>(__f)
? partial_ordering::less
: static_cast<_Up&&>(__f) < static_cast<_Tp&&>(__e)
? partial_ordering::greater
: partial_ordering::unordered;
}
};
}
inline namespace _Cpo
{
inline constexpr __compare::_Strong_order strong_order{};
inline constexpr __compare::_Weak_order weak_order{};
inline constexpr __compare::_Partial_order partial_order{};
inline constexpr __compare::_Strong_fallback
compare_strong_order_fallback{};
inline constexpr __compare::_Weak_fallback
compare_weak_order_fallback{};
inline constexpr __compare::_Partial_fallback
compare_partial_order_fallback{};
}
namespace __detail
{
inline constexpr struct _Synth3way
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept(const _Tp* __t = nullptr, const _Up* __u = nullptr)
{
if constexpr (three_way_comparable_with<_Tp, _Up>)
return noexcept(*__t <=> *__u);
else
return noexcept(*__t < *__u) && noexcept(*__u < *__t);
}
template<typename _Tp, typename _Up>
[[nodiscard]]
constexpr auto
operator()(const _Tp& __t, const _Up& __u) const
noexcept(_S_noexcept<_Tp, _Up>())
requires requires
{
{ __t < __u } -> __boolean_testable;
{ __u < __t } -> __boolean_testable;
}
{
if constexpr (three_way_comparable_with<_Tp, _Up>)
return __t <=> __u;
else
{
if (__t < __u)
return weak_ordering::less;
else if (__u < __t)
return weak_ordering::greater;
else
return weak_ordering::equivalent;
}
}
} __synth3way = {};
template<typename _Tp, typename _Up = _Tp>
using __synth3way_t
= decltype(__detail::__synth3way(std::declval<_Tp&>(),
std::declval<_Up&>()));
}
}
# 66 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 79 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
inline constexpr piecewise_construct_t piecewise_construct =
piecewise_construct_t();
template<typename _T1, typename _T2>
struct pair;
template<typename...>
class tuple;
template<typename _Tp, size_t _Nm>
struct array;
template<size_t...>
struct _Index_tuple;
template<size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
get(pair<_Tp1, _Tp2>& __in) noexcept;
template<size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
get(pair<_Tp1, _Tp2>&& __in) noexcept;
template<size_t _Int, class _Tp1, class _Tp2>
constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
get(const pair<_Tp1, _Tp2>& __in) noexcept;
template<size_t _Int, class _Tp1, class _Tp2>
constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
get(const pair<_Tp1, _Tp2>&& __in) noexcept;
template<size_t __i, typename... _Elements>
constexpr __tuple_element_t<__i, tuple<_Elements...>>&
get(tuple<_Elements...>& __t) noexcept;
template<size_t __i, typename... _Elements>
constexpr const __tuple_element_t<__i, tuple<_Elements...>>&
get(const tuple<_Elements...>& __t) noexcept;
template<size_t __i, typename... _Elements>
constexpr __tuple_element_t<__i, tuple<_Elements...>>&&
get(tuple<_Elements...>&& __t) noexcept;
template<size_t __i, typename... _Elements>
constexpr const __tuple_element_t<__i, tuple<_Elements...>>&&
get(const tuple<_Elements...>&& __t) noexcept;
template<size_t _Int, typename _Tp, size_t _Nm>
constexpr _Tp&
get(array<_Tp, _Nm>&) noexcept;
template<size_t _Int, typename _Tp, size_t _Nm>
constexpr _Tp&&
get(array<_Tp, _Nm>&&) noexcept;
template<size_t _Int, typename _Tp, size_t _Nm>
constexpr const _Tp&
get(const array<_Tp, _Nm>&) noexcept;
template<size_t _Int, typename _Tp, size_t _Nm>
constexpr const _Tp&&
get(const array<_Tp, _Nm>&&) noexcept;
# 260 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _U1, typename _U2> class __pair_base
{
};
# 283 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
struct pair
: public __pair_base<_T1, _T2>
{
typedef _T1 first_type;
typedef _T2 second_type;
_T1 first;
_T2 second;
constexpr pair(const pair&) = default;
constexpr pair(pair&&) = default;
template<typename... _Args1, typename... _Args2>
constexpr
pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
constexpr void
swap(pair& __p)
noexcept(__and_<__is_nothrow_swappable<_T1>,
__is_nothrow_swappable<_T2>>::value)
{
using std::swap;
swap(first, __p.first);
swap(second, __p.second);
}
# 331 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
private:
template<typename... _Args1, size_t... _Indexes1,
typename... _Args2, size_t... _Indexes2>
constexpr
pair(tuple<_Args1...>&, tuple<_Args2...>&,
_Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
public:
constexpr
explicit(__not_<__and_<__is_implicitly_default_constructible<_T1>,
__is_implicitly_default_constructible<_T2>>>())
pair()
requires is_default_constructible_v<_T1>
&& is_default_constructible_v<_T2>
: first(), second()
{ }
private:
template<typename _U1, typename _U2>
static constexpr bool
_S_constructible()
{
if constexpr (is_constructible_v<_T1, _U1>)
return is_constructible_v<_T2, _U2>;
return false;
}
template<typename _U1, typename _U2>
static constexpr bool
_S_nothrow_constructible()
{
if constexpr (is_nothrow_constructible_v<_T1, _U1>)
return is_nothrow_constructible_v<_T2, _U2>;
return false;
}
template<typename _U1, typename _U2>
static constexpr bool
_S_convertible()
{
if constexpr (is_convertible_v<_U1, _T1>)
return is_convertible_v<_U2, _T2>;
return false;
}
template<typename _U1, typename _U2>
static constexpr bool
_S_dangles()
{
if constexpr (__reference_constructs_from_temporary(_T1, _U1&&))
return true;
else
return __reference_constructs_from_temporary(_T2, _U2&&);
}
# 424 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
public:
constexpr explicit(!_S_convertible<const _T1&, const _T2&>())
pair(const _T1& __x, const _T2& __y)
noexcept(_S_nothrow_constructible<const _T1&, const _T2&>())
requires (_S_constructible<const _T1&, const _T2&>())
: first(__x), second(__y)
{ }
template<typename _U1, typename _U2>
requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>())
constexpr explicit(!_S_convertible<_U1, _U2>())
pair(_U1&& __x, _U2&& __y)
noexcept(_S_nothrow_constructible<_U1, _U2>())
: first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y))
{ }
template<typename _U1, typename _U2>
requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>())
constexpr explicit(!_S_convertible<_U1, _U2>())
pair(_U1&&, _U2&&) = delete;
template<typename _U1, typename _U2>
requires (_S_constructible<const _U1&, const _U2&>())
&& (!_S_dangles<_U1, _U2>())
constexpr explicit(!_S_convertible<const _U1&, const _U2&>())
pair(const pair<_U1, _U2>& __p)
noexcept(_S_nothrow_constructible<const _U1&, const _U2&>())
: first(__p.first), second(__p.second)
{ }
template<typename _U1, typename _U2>
requires (_S_constructible<const _U1&, const _U2&>())
&& (_S_dangles<const _U1&, const _U2&>())
constexpr explicit(!_S_convertible<const _U1&, const _U2&>())
pair(const pair<_U1, _U2>&) = delete;
template<typename _U1, typename _U2>
requires (_S_constructible<_U1, _U2>()) && (!_S_dangles<_U1, _U2>())
constexpr explicit(!_S_convertible<_U1, _U2>())
pair(pair<_U1, _U2>&& __p)
noexcept(_S_nothrow_constructible<_U1, _U2>())
: first(std::forward<_U1>(__p.first)),
second(std::forward<_U2>(__p.second))
{ }
template<typename _U1, typename _U2>
requires (_S_constructible<_U1, _U2>()) && (_S_dangles<_U1, _U2>())
constexpr explicit(!_S_convertible<_U1, _U2>())
pair(pair<_U1, _U2>&&) = delete;
# 537 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
private:
template<typename _U1, typename _U2>
static constexpr bool
_S_assignable()
{
if constexpr (is_assignable_v<_T1&, _U1>)
return is_assignable_v<_T2&, _U2>;
return false;
}
template<typename _U1, typename _U2>
static constexpr bool
_S_const_assignable()
{
if constexpr (is_assignable_v<const _T1&, _U1>)
return is_assignable_v<const _T2&, _U2>;
return false;
}
template<typename _U1, typename _U2>
static constexpr bool
_S_nothrow_assignable()
{
if constexpr (is_nothrow_assignable_v<_T1&, _U1>)
return is_nothrow_assignable_v<_T2&, _U2>;
return false;
}
# 585 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
public:
pair& operator=(const pair&) = delete;
constexpr pair&
operator=(const pair& __p)
noexcept(_S_nothrow_assignable<const _T1&, const _T2&>())
requires (_S_assignable<const _T1&, const _T2&>())
{
first = __p.first;
second = __p.second;
return *this;
}
constexpr pair&
operator=(pair&& __p)
noexcept(_S_nothrow_assignable<_T1, _T2>())
requires (_S_assignable<_T1, _T2>())
{
first = std::forward<first_type>(__p.first);
second = std::forward<second_type>(__p.second);
return *this;
}
template<typename _U1, typename _U2>
constexpr pair&
operator=(const pair<_U1, _U2>& __p)
noexcept(_S_nothrow_assignable<const _U1&, const _U2&>())
requires (_S_assignable<const _U1&, const _U2&>())
{
first = __p.first;
second = __p.second;
return *this;
}
template<typename _U1, typename _U2>
constexpr pair&
operator=(pair<_U1, _U2>&& __p)
noexcept(_S_nothrow_assignable<_U1, _U2>())
requires (_S_assignable<_U1, _U2>())
{
first = std::forward<_U1>(__p.first);
second = std::forward<_U2>(__p.second);
return *this;
}
# 995 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
};
template<typename _T1, typename _T2> pair(_T1, _T2) -> pair<_T1, _T2>;
template<typename _T1, typename _T2, typename _U1, typename _U2>
inline constexpr bool
operator==(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y)
{ return __x.first == __y.first && __x.second == __y.second; }
# 1020 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2, typename _U1, typename _U2>
constexpr common_comparison_category_t<__detail::__synth3way_t<_T1, _U1>,
__detail::__synth3way_t<_T2, _U2>>
operator<=>(const pair<_T1, _T2>& __x, const pair<_U1, _U2>& __y)
{
if (auto __c = __detail::__synth3way(__x.first, __y.first); __c != 0)
return __c;
return __detail::__synth3way(__x.second, __y.second);
}
# 1080 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
constexpr inline
typename enable_if<__and_<__is_swappable<_T1>,
__is_swappable<_T2>>::value>::type
swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
noexcept(noexcept(__x.swap(__y)))
{ __x.swap(__y); }
# 1103 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
typename enable_if<!__and_<__is_swappable<_T1>,
__is_swappable<_T2>>::value>::type
swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;
# 1129 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
constexpr pair<typename __decay_and_strip<_T1>::__type,
typename __decay_and_strip<_T2>::__type>
make_pair(_T1&& __x, _T2&& __y)
{
typedef typename __decay_and_strip<_T1>::__type __ds_type1;
typedef typename __decay_and_strip<_T2>::__type __ds_type2;
typedef pair<__ds_type1, __ds_type2> __pair_type;
return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
}
# 1152 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
template<typename _T1, typename _T2>
struct __is_tuple_like_impl<pair<_T1, _T2>> : true_type
{ };
template<class _Tp1, class _Tp2>
struct tuple_size<pair<_Tp1, _Tp2>>
: public integral_constant<size_t, 2> { };
template<class _Tp1, class _Tp2>
struct tuple_element<0, pair<_Tp1, _Tp2>>
{ typedef _Tp1 type; };
template<class _Tp1, class _Tp2>
struct tuple_element<1, pair<_Tp1, _Tp2>>
{ typedef _Tp2 type; };
template<size_t __i, typename... _Types>
struct tuple_element<__i, tuple<_Types...>>;
template<typename _Tp1, typename _Tp2>
inline constexpr size_t tuple_size_v<pair<_Tp1, _Tp2>> = 2;
template<typename _Tp1, typename _Tp2>
inline constexpr size_t tuple_size_v<const pair<_Tp1, _Tp2>> = 2;
template<typename _Tp>
inline constexpr bool __is_pair = false;
template<typename _Tp, typename _Up>
inline constexpr bool __is_pair<pair<_Tp, _Up>> = true;
template<size_t _Int>
struct __pair_get;
template<>
struct __pair_get<0>
{
template<typename _Tp1, typename _Tp2>
static constexpr _Tp1&
__get(pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.first; }
template<typename _Tp1, typename _Tp2>
static constexpr _Tp1&&
__move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<_Tp1>(__pair.first); }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp1&
__const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.first; }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp1&&
__const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<const _Tp1>(__pair.first); }
};
template<>
struct __pair_get<1>
{
template<typename _Tp1, typename _Tp2>
static constexpr _Tp2&
__get(pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.second; }
template<typename _Tp1, typename _Tp2>
static constexpr _Tp2&&
__move_get(pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<_Tp2>(__pair.second); }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp2&
__const_get(const pair<_Tp1, _Tp2>& __pair) noexcept
{ return __pair.second; }
template<typename _Tp1, typename _Tp2>
static constexpr const _Tp2&&
__const_move_get(const pair<_Tp1, _Tp2>&& __pair) noexcept
{ return std::forward<const _Tp2>(__pair.second); }
};
template<size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
get(pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__get(__in); }
template<size_t _Int, class _Tp1, class _Tp2>
constexpr typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
get(pair<_Tp1, _Tp2>&& __in) noexcept
{ return __pair_get<_Int>::__move_get(std::move(__in)); }
template<size_t _Int, class _Tp1, class _Tp2>
constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&
get(const pair<_Tp1, _Tp2>& __in) noexcept
{ return __pair_get<_Int>::__const_get(__in); }
template<size_t _Int, class _Tp1, class _Tp2>
constexpr const typename tuple_element<_Int, pair<_Tp1, _Tp2>>::type&&
get(const pair<_Tp1, _Tp2>&& __in) noexcept
{ return __pair_get<_Int>::__const_move_get(std::move(__in)); }
template <typename _Tp, typename _Up>
constexpr _Tp&
get(pair<_Tp, _Up>& __p) noexcept
{ return __p.first; }
template <typename _Tp, typename _Up>
constexpr const _Tp&
get(const pair<_Tp, _Up>& __p) noexcept
{ return __p.first; }
template <typename _Tp, typename _Up>
constexpr _Tp&&
get(pair<_Tp, _Up>&& __p) noexcept
{ return std::move(__p.first); }
template <typename _Tp, typename _Up>
constexpr const _Tp&&
get(const pair<_Tp, _Up>&& __p) noexcept
{ return std::move(__p.first); }
template <typename _Tp, typename _Up>
constexpr _Tp&
get(pair<_Up, _Tp>& __p) noexcept
{ return __p.second; }
template <typename _Tp, typename _Up>
constexpr const _Tp&
get(const pair<_Up, _Tp>& __p) noexcept
{ return __p.second; }
template <typename _Tp, typename _Up>
constexpr _Tp&&
get(pair<_Up, _Tp>&& __p) noexcept
{ return std::move(__p.second); }
template <typename _Tp, typename _Up>
constexpr const _Tp&&
get(const pair<_Up, _Tp>&& __p) noexcept
{ return std::move(__p.second); }
# 1333 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_pair.h" 3
}
# 65 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 1 3
# 63 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ptr_traits.h" 1 3
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ptr_traits.h" 3
namespace __gnu_debug { struct _Safe_iterator_base; }
namespace std __attribute__ ((__visibility__ ("default")))
{
class __undefined;
template<typename _Tp>
struct __get_first_arg
{ using type = __undefined; };
template<template<typename, typename...> class _SomeTemplate, typename _Tp,
typename... _Types>
struct __get_first_arg<_SomeTemplate<_Tp, _Types...>>
{ using type = _Tp; };
template<typename _Tp, typename _Up>
struct __replace_first_arg
{ };
template<template<typename, typename...> class _SomeTemplate, typename _Up,
typename _Tp, typename... _Types>
struct __replace_first_arg<_SomeTemplate<_Tp, _Types...>, _Up>
{ using type = _SomeTemplate<_Up, _Types...>; };
template<typename _Ptr, typename = void>
struct __ptr_traits_elem : __get_first_arg<_Ptr>
{ };
template<typename _Ptr> requires requires { typename _Ptr::element_type; }
struct __ptr_traits_elem<_Ptr, void>
{ using type = typename _Ptr::element_type; };
template<typename _Ptr>
using __ptr_traits_elem_t = typename __ptr_traits_elem<_Ptr>::type;
template<typename _Ptr, typename _Elt, bool = is_void<_Elt>::value>
struct __ptr_traits_ptr_to
{
using pointer = _Ptr;
using element_type = _Elt;
static pointer
pointer_to(element_type& __r)
requires requires {
{ pointer::pointer_to(__r) } -> convertible_to<pointer>;
}
{ return pointer::pointer_to(__r); }
};
template<typename _Ptr, typename _Elt>
struct __ptr_traits_ptr_to<_Ptr, _Elt, true>
{ };
template<typename _Tp>
struct __ptr_traits_ptr_to<_Tp*, _Tp, false>
{
using pointer = _Tp*;
using element_type = _Tp;
static constexpr pointer
pointer_to(element_type& __r) noexcept
{ return std::addressof(__r); }
};
template<typename _Ptr, typename _Elt>
struct __ptr_traits_impl : __ptr_traits_ptr_to<_Ptr, _Elt>
{
private:
template<typename _Tp>
using __diff_t = typename _Tp::difference_type;
template<typename _Tp, typename _Up>
using __rebind = __type_identity<typename _Tp::template rebind<_Up>>;
public:
using pointer = _Ptr;
using element_type = _Elt;
using difference_type = __detected_or_t<ptrdiff_t, __diff_t, _Ptr>;
template<typename _Up>
using rebind = typename __detected_or_t<__replace_first_arg<_Ptr, _Up>,
__rebind, _Ptr, _Up>::type;
};
template<typename _Ptr>
struct __ptr_traits_impl<_Ptr, __undefined>
{ };
template<typename _Ptr>
struct pointer_traits : __ptr_traits_impl<_Ptr, __ptr_traits_elem_t<_Ptr>>
{ };
template<typename _Tp>
struct pointer_traits<_Tp*> : __ptr_traits_ptr_to<_Tp*, _Tp>
{
typedef _Tp* pointer;
typedef _Tp element_type;
typedef ptrdiff_t difference_type;
template<typename _Up> using rebind = _Up*;
};
template<typename _Ptr, typename _Tp>
using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;
template<typename _Tp>
constexpr _Tp*
__to_address(_Tp* __ptr) noexcept
{
static_assert(!std::is_function<_Tp>::value, "not a function pointer");
return __ptr;
}
template<typename _Ptr>
constexpr auto
__to_address(const _Ptr& __ptr) noexcept
-> decltype(std::pointer_traits<_Ptr>::to_address(__ptr))
{ return std::pointer_traits<_Ptr>::to_address(__ptr); }
template<typename _Ptr, typename... _None>
constexpr auto
__to_address(const _Ptr& __ptr, _None...) noexcept
{
if constexpr (is_base_of_v<__gnu_debug::_Safe_iterator_base, _Ptr>)
return std::__to_address(__ptr.base().operator->());
else
return std::__to_address(__ptr.operator->());
}
template<typename _Tp>
constexpr _Tp*
to_address(_Tp* __ptr) noexcept
{ return std::__to_address(__ptr); }
# 251 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ptr_traits.h" 3
template<typename _Ptr>
constexpr auto
to_address(const _Ptr& __ptr) noexcept
{ return std::__to_address(__ptr); }
}
# 38 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ranges_cmp.h" 1 3
# 37 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/ranges_cmp.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
struct __is_transparent;
struct identity
{
template<typename _Tp>
[[nodiscard]]
constexpr _Tp&&
operator()(_Tp&& __t) const noexcept
{ return std::forward<_Tp>(__t); }
using is_transparent = __is_transparent;
};
namespace ranges
{
namespace __detail
{
template<typename _Tp, typename _Up>
concept __less_builtin_ptr_cmp
= requires (_Tp&& __t, _Up&& __u) { { __t < __u } -> same_as<bool>; }
&& convertible_to<_Tp, const volatile void*>
&& convertible_to<_Up, const volatile void*>
&& (! requires(_Tp&& __t, _Up&& __u)
{ operator<(std::forward<_Tp>(__t), std::forward<_Up>(__u)); }
&& ! requires(_Tp&& __t, _Up&& __u)
{ std::forward<_Tp>(__t).operator<(std::forward<_Up>(__u)); });
}
struct equal_to
{
template<typename _Tp, typename _Up>
requires equality_comparable_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Tp>() == std::declval<_Up>()))
{ return std::forward<_Tp>(__t) == std::forward<_Up>(__u); }
using is_transparent = __is_transparent;
};
struct not_equal_to
{
template<typename _Tp, typename _Up>
requires equality_comparable_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Up>() == std::declval<_Tp>()))
{ return !equal_to{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); }
using is_transparent = __is_transparent;
};
struct less
{
template<typename _Tp, typename _Up>
requires totally_ordered_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>()))
{
if constexpr (__detail::__less_builtin_ptr_cmp<_Tp, _Up>)
{
if (std::__is_constant_evaluated())
return __t < __u;
auto __x = reinterpret_cast<long unsigned int>(
static_cast<const volatile void*>(std::forward<_Tp>(__t)));
auto __y = reinterpret_cast<long unsigned int>(
static_cast<const volatile void*>(std::forward<_Up>(__u)));
return __x < __y;
}
else
return std::forward<_Tp>(__t) < std::forward<_Up>(__u);
}
using is_transparent = __is_transparent;
};
struct greater
{
template<typename _Tp, typename _Up>
requires totally_ordered_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>()))
{ return less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); }
using is_transparent = __is_transparent;
};
struct greater_equal
{
template<typename _Tp, typename _Up>
requires totally_ordered_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Tp>() < std::declval<_Up>()))
{ return !less{}(std::forward<_Tp>(__t), std::forward<_Up>(__u)); }
using is_transparent = __is_transparent;
};
struct less_equal
{
template<typename _Tp, typename _Up>
requires totally_ordered_with<_Tp, _Up>
constexpr bool
operator()(_Tp&& __t, _Up&& __u) const
noexcept(noexcept(std::declval<_Up>() < std::declval<_Tp>()))
{ return !less{}(std::forward<_Up>(__u), std::forward<_Tp>(__t)); }
using is_transparent = __is_transparent;
};
}
}
# 39 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 58 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 3
struct default_sentinel_t { };
inline constexpr default_sentinel_t default_sentinel{};
struct input_iterator_tag;
struct output_iterator_tag;
struct forward_iterator_tag;
struct bidirectional_iterator_tag;
struct random_access_iterator_tag;
struct contiguous_iterator_tag;
template<typename _Iterator>
struct iterator_traits;
template<typename _Tp> requires is_object_v<_Tp>
struct iterator_traits<_Tp*>;
template<typename _Iterator, typename>
struct __iterator_traits;
namespace __detail
{
template<typename _Tp>
using __with_ref = _Tp&;
template<typename _Tp>
concept __can_reference = requires { typename __with_ref<_Tp>; };
template<typename _Tp>
concept __dereferenceable = requires(_Tp& __t)
{
{ *__t } -> __can_reference;
};
}
template<__detail::__dereferenceable _Tp>
using iter_reference_t = decltype(*std::declval<_Tp&>());
namespace ranges
{
namespace __imove
{
void iter_move() = delete;
template<typename _Tp>
concept __adl_imove
= (std::__detail::__class_or_enum<remove_reference_t<_Tp>>)
&& requires(_Tp&& __t) { iter_move(static_cast<_Tp&&>(__t)); };
struct _IterMove
{
private:
template<typename _Tp>
struct __result
{ using type = iter_reference_t<_Tp>; };
template<typename _Tp>
requires __adl_imove<_Tp>
struct __result<_Tp>
{ using type = decltype(iter_move(std::declval<_Tp>())); };
template<typename _Tp>
requires (!__adl_imove<_Tp>)
&& is_lvalue_reference_v<iter_reference_t<_Tp>>
struct __result<_Tp>
{ using type = remove_reference_t<iter_reference_t<_Tp>>&&; };
template<typename _Tp>
static constexpr bool
_S_noexcept()
{
if constexpr (__adl_imove<_Tp>)
return noexcept(iter_move(std::declval<_Tp>()));
else
return noexcept(*std::declval<_Tp>());
}
public:
template<std::__detail::__dereferenceable _Tp>
using __type = typename __result<_Tp>::type;
template<std::__detail::__dereferenceable _Tp>
[[nodiscard]]
constexpr __type<_Tp>
operator()(_Tp&& __e) const
noexcept(_S_noexcept<_Tp>())
{
if constexpr (__adl_imove<_Tp>)
return iter_move(static_cast<_Tp&&>(__e));
else if constexpr (is_lvalue_reference_v<iter_reference_t<_Tp>>)
return static_cast<__type<_Tp>>(*__e);
else
return *__e;
}
};
}
inline namespace _Cpo {
inline constexpr __imove::_IterMove iter_move{};
}
}
template<__detail::__dereferenceable _Tp>
requires __detail::__can_reference<ranges::__imove::_IterMove::__type<_Tp&>>
using iter_rvalue_reference_t = ranges::__imove::_IterMove::__type<_Tp&>;
template<typename> struct incrementable_traits { };
template<typename _Tp> requires is_object_v<_Tp>
struct incrementable_traits<_Tp*>
{ using difference_type = ptrdiff_t; };
template<typename _Iter>
struct incrementable_traits<const _Iter>
: incrementable_traits<_Iter> { };
template<typename _Tp> requires requires { typename _Tp::difference_type; }
struct incrementable_traits<_Tp>
{ using difference_type = typename _Tp::difference_type; };
template<typename _Tp>
requires (!requires { typename _Tp::difference_type; }
&& requires(const _Tp& __a, const _Tp& __b)
{ { __a - __b } -> integral; })
struct incrementable_traits<_Tp>
{
using difference_type
= make_signed_t<decltype(std::declval<_Tp>() - std::declval<_Tp>())>;
};
# 204 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/iterator_concepts.h" 3
namespace __detail
{
template<typename _Iter>
concept __primary_traits_iter
= __is_base_of(__iterator_traits<_Iter, void>, iterator_traits<_Iter>);
template<typename _Iter, typename _Tp>
struct __iter_traits_impl
{ using type = iterator_traits<_Iter>; };
template<typename _Iter, typename _Tp>
requires __primary_traits_iter<_Iter>
struct __iter_traits_impl<_Iter, _Tp>
{ using type = _Tp; };
template<typename _Iter, typename _Tp = _Iter>
using __iter_traits = typename __iter_traits_impl<_Iter, _Tp>::type;
template<typename _Tp>
using __iter_diff_t = typename
__iter_traits<_Tp, incrementable_traits<_Tp>>::difference_type;
}
template<typename _Tp>
using iter_difference_t = __detail::__iter_diff_t<remove_cvref_t<_Tp>>;
namespace __detail
{
template<typename> struct __cond_value_type { };
template<typename _Tp> requires is_object_v<_Tp>
struct __cond_value_type<_Tp>
{ using value_type = remove_cv_t<_Tp>; };
template<typename _Tp>
concept __has_member_value_type
= requires { typename _Tp::value_type; };
template<typename _Tp>
concept __has_member_element_type
= requires { typename _Tp::element_type; };
}
template<typename> struct indirectly_readable_traits { };
template<typename _Tp>
struct indirectly_readable_traits<_Tp*>
: __detail::__cond_value_type<_Tp>
{ };
template<typename _Iter> requires is_array_v<_Iter>
struct indirectly_readable_traits<_Iter>
{ using value_type = remove_cv_t<remove_extent_t<_Iter>>; };
template<typename _Iter>
struct indirectly_readable_traits<const _Iter>
: indirectly_readable_traits<_Iter>
{ };
template<__detail::__has_member_value_type _Tp>
struct indirectly_readable_traits<_Tp>
: __detail::__cond_value_type<typename _Tp::value_type>
{ };
template<__detail::__has_member_element_type _Tp>
struct indirectly_readable_traits<_Tp>
: __detail::__cond_value_type<typename _Tp::element_type>
{ };
template<__detail::__has_member_value_type _Tp>
requires __detail::__has_member_element_type<_Tp>
&& same_as<remove_cv_t<typename _Tp::element_type>,
remove_cv_t<typename _Tp::value_type>>
struct indirectly_readable_traits<_Tp>
: __detail::__cond_value_type<typename _Tp::value_type>
{ };
template<__detail::__has_member_value_type _Tp>
requires __detail::__has_member_element_type<_Tp>
struct indirectly_readable_traits<_Tp>
{ };
namespace __detail
{
template<typename _Tp>
using __iter_value_t = typename
__iter_traits<_Tp, indirectly_readable_traits<_Tp>>::value_type;
}
template<typename _Tp>
using iter_value_t = __detail::__iter_value_t<remove_cvref_t<_Tp>>;
namespace __detail
{
template<typename _Iter>
concept __cpp17_iterator = requires(_Iter __it)
{
{ *__it } -> __can_reference;
{ ++__it } -> same_as<_Iter&>;
{ *__it++ } -> __can_reference;
} && copyable<_Iter>;
template<typename _Iter>
concept __cpp17_input_iterator = __cpp17_iterator<_Iter>
&& equality_comparable<_Iter>
&& requires(_Iter __it)
{
typename incrementable_traits<_Iter>::difference_type;
typename indirectly_readable_traits<_Iter>::value_type;
typename common_reference_t<iter_reference_t<_Iter>&&,
typename indirectly_readable_traits<_Iter>::value_type&>;
typename common_reference_t<decltype(*__it++)&&,
typename indirectly_readable_traits<_Iter>::value_type&>;
requires signed_integral<
typename incrementable_traits<_Iter>::difference_type>;
};
template<typename _Iter>
concept __cpp17_fwd_iterator = __cpp17_input_iterator<_Iter>
&& constructible_from<_Iter>
&& is_lvalue_reference_v<iter_reference_t<_Iter>>
&& same_as<remove_cvref_t<iter_reference_t<_Iter>>,
typename indirectly_readable_traits<_Iter>::value_type>
&& requires(_Iter __it)
{
{ __it++ } -> convertible_to<const _Iter&>;
{ *__it++ } -> same_as<iter_reference_t<_Iter>>;
};
template<typename _Iter>
concept __cpp17_bidi_iterator = __cpp17_fwd_iterator<_Iter>
&& requires(_Iter __it)
{
{ --__it } -> same_as<_Iter&>;
{ __it-- } -> convertible_to<const _Iter&>;
{ *__it-- } -> same_as<iter_reference_t<_Iter>>;
};
template<typename _Iter>
concept __cpp17_randacc_iterator = __cpp17_bidi_iterator<_Iter>
&& totally_ordered<_Iter>
&& requires(_Iter __it,
typename incrementable_traits<_Iter>::difference_type __n)
{
{ __it += __n } -> same_as<_Iter&>;
{ __it -= __n } -> same_as<_Iter&>;
{ __it + __n } -> same_as<_Iter>;
{ __n + __it } -> same_as<_Iter>;
{ __it - __n } -> same_as<_Iter>;
{ __it - __it } -> same_as<decltype(__n)>;
{ __it[__n] } -> convertible_to<iter_reference_t<_Iter>>;
};
template<typename _Iter>
concept __iter_with_nested_types = requires {
typename _Iter::iterator_category;
typename _Iter::value_type;
typename _Iter::difference_type;
typename _Iter::reference;
};
template<typename _Iter>
concept __iter_without_nested_types = !__iter_with_nested_types<_Iter>;
template<typename _Iter>
concept __iter_without_category
= !requires { typename _Iter::iterator_category; };
}
template<typename _Iterator>
requires __detail::__iter_with_nested_types<_Iterator>
struct __iterator_traits<_Iterator, void>
{
private:
template<typename _Iter>
struct __ptr
{ using type = void; };
template<typename _Iter> requires requires { typename _Iter::pointer; }
struct __ptr<_Iter>
{ using type = typename _Iter::pointer; };
public:
using iterator_category = typename _Iterator::iterator_category;
using value_type = typename _Iterator::value_type;
using difference_type = typename _Iterator::difference_type;
using pointer = typename __ptr<_Iterator>::type;
using reference = typename _Iterator::reference;
};
template<typename _Iterator>
requires __detail::__iter_without_nested_types<_Iterator>
&& __detail::__cpp17_input_iterator<_Iterator>
struct __iterator_traits<_Iterator, void>
{
private:
template<typename _Iter>
struct __cat
{ using type = input_iterator_tag; };
template<typename _Iter>
requires requires { typename _Iter::iterator_category; }
struct __cat<_Iter>
{ using type = typename _Iter::iterator_category; };
template<typename _Iter>
requires __detail::__iter_without_category<_Iter>
&& __detail::__cpp17_randacc_iterator<_Iter>
struct __cat<_Iter>
{ using type = random_access_iterator_tag; };
template<typename _Iter>
requires __detail::__iter_without_category<_Iter>
&& __detail::__cpp17_bidi_iterator<_Iter>
struct __cat<_Iter>
{ using type = bidirectional_iterator_tag; };
template<typename _Iter>
requires __detail::__iter_without_category<_Iter>
&& __detail::__cpp17_fwd_iterator<_Iter>
struct __cat<_Iter>
{ using type = forward_iterator_tag; };
template<typename _Iter>
struct __ptr
{ using type = void; };
template<typename _Iter> requires requires { typename _Iter::pointer; }
struct __ptr<_Iter>
{ using type = typename _Iter::pointer; };
template<typename _Iter>
requires (!requires { typename _Iter::pointer; }
&& requires(_Iter& __it) { __it.operator->(); })
struct __ptr<_Iter>
{ using type = decltype(std::declval<_Iter&>().operator->()); };
template<typename _Iter>
struct __ref
{ using type = iter_reference_t<_Iter>; };
template<typename _Iter> requires requires { typename _Iter::reference; }
struct __ref<_Iter>
{ using type = typename _Iter::reference; };
public:
using iterator_category = typename __cat<_Iterator>::type;
using value_type
= typename indirectly_readable_traits<_Iterator>::value_type;
using difference_type
= typename incrementable_traits<_Iterator>::difference_type;
using pointer = typename __ptr<_Iterator>::type;
using reference = typename __ref<_Iterator>::type;
};
template<typename _Iterator>
requires __detail::__iter_without_nested_types<_Iterator>
&& __detail::__cpp17_iterator<_Iterator>
struct __iterator_traits<_Iterator, void>
{
private:
template<typename _Iter>
struct __diff
{ using type = void; };
template<typename _Iter>
requires requires
{ typename incrementable_traits<_Iter>::difference_type; }
struct __diff<_Iter>
{
using type = typename incrementable_traits<_Iter>::difference_type;
};
public:
using iterator_category = output_iterator_tag;
using value_type = void;
using difference_type = typename __diff<_Iterator>::type;
using pointer = void;
using reference = void;
};
namespace __detail
{
template<typename _Iter>
struct __iter_concept_impl;
template<typename _Iter>
requires requires { typename __iter_traits<_Iter>::iterator_concept; }
struct __iter_concept_impl<_Iter>
{ using type = typename __iter_traits<_Iter>::iterator_concept; };
template<typename _Iter>
requires (!requires { typename __iter_traits<_Iter>::iterator_concept; }
&& requires { typename __iter_traits<_Iter>::iterator_category; })
struct __iter_concept_impl<_Iter>
{ using type = typename __iter_traits<_Iter>::iterator_category; };
template<typename _Iter>
requires (!requires { typename __iter_traits<_Iter>::iterator_concept; }
&& !requires { typename __iter_traits<_Iter>::iterator_category; }
&& __primary_traits_iter<_Iter>)
struct __iter_concept_impl<_Iter>
{ using type = random_access_iterator_tag; };
template<typename _Iter>
struct __iter_concept_impl
{ };
template<typename _Iter>
using __iter_concept = typename __iter_concept_impl<_Iter>::type;
template<typename _In>
concept __indirectly_readable_impl = requires
{
typename iter_value_t<_In>;
typename iter_reference_t<_In>;
typename iter_rvalue_reference_t<_In>;
requires same_as<iter_reference_t<const _In>,
iter_reference_t<_In>>;
requires same_as<iter_rvalue_reference_t<const _In>,
iter_rvalue_reference_t<_In>>;
}
&& common_reference_with<iter_reference_t<_In>&&, iter_value_t<_In>&>
&& common_reference_with<iter_reference_t<_In>&&,
iter_rvalue_reference_t<_In>&&>
&& common_reference_with<iter_rvalue_reference_t<_In>&&,
const iter_value_t<_In>&>;
}
template<typename _In>
concept indirectly_readable
= __detail::__indirectly_readable_impl<remove_cvref_t<_In>>;
template<indirectly_readable _Tp>
using iter_common_reference_t
= common_reference_t<iter_reference_t<_Tp>, iter_value_t<_Tp>&>;
template<typename _Out, typename _Tp>
concept indirectly_writable = requires(_Out&& __o, _Tp&& __t)
{
*__o = std::forward<_Tp>(__t);
*std::forward<_Out>(__o) = std::forward<_Tp>(__t);
const_cast<const iter_reference_t<_Out>&&>(*__o)
= std::forward<_Tp>(__t);
const_cast<const iter_reference_t<_Out>&&>(*std::forward<_Out>(__o))
= std::forward<_Tp>(__t);
};
namespace ranges::__detail
{
class __max_diff_type;
class __max_size_type;
__extension__
template<typename _Tp>
concept __is_signed_int128
= same_as<_Tp, __int128>;
__extension__
template<typename _Tp>
concept __is_unsigned_int128
= same_as<_Tp, unsigned __int128>;
template<typename _Tp>
concept __cv_bool = same_as<const volatile _Tp, const volatile bool>;
template<typename _Tp>
concept __integral_nonbool = integral<_Tp> && !__cv_bool<_Tp>;
template<typename _Tp>
concept __is_int128 = __is_signed_int128<_Tp> || __is_unsigned_int128<_Tp>;
template<typename _Tp>
concept __is_integer_like = __integral_nonbool<_Tp>
|| __is_int128<_Tp>
|| same_as<_Tp, __max_diff_type> || same_as<_Tp, __max_size_type>;
template<typename _Tp>
concept __is_signed_integer_like = signed_integral<_Tp>
|| __is_signed_int128<_Tp>
|| same_as<_Tp, __max_diff_type>;
}
namespace __detail { using ranges::__detail::__is_signed_integer_like; }
template<typename _Iter>
concept weakly_incrementable = movable<_Iter>
&& requires(_Iter __i)
{
typename iter_difference_t<_Iter>;
requires __detail::__is_signed_integer_like<iter_difference_t<_Iter>>;
{ ++__i } -> same_as<_Iter&>;
__i++;
};
template<typename _Iter>
concept incrementable = regular<_Iter> && weakly_incrementable<_Iter>
&& requires(_Iter __i) { { __i++ } -> same_as<_Iter>; };
template<typename _Iter>
concept input_or_output_iterator
= requires(_Iter __i) { { *__i } -> __detail::__can_reference; }
&& weakly_incrementable<_Iter>;
template<typename _Sent, typename _Iter>
concept sentinel_for = semiregular<_Sent>
&& input_or_output_iterator<_Iter>
&& __detail::__weakly_eq_cmp_with<_Sent, _Iter>;
template<typename _Sent, typename _Iter>
inline constexpr bool disable_sized_sentinel_for = false;
template<typename _Sent, typename _Iter>
concept sized_sentinel_for = sentinel_for<_Sent, _Iter>
&& !disable_sized_sentinel_for<remove_cv_t<_Sent>, remove_cv_t<_Iter>>
&& requires(const _Iter& __i, const _Sent& __s)
{
{ __s - __i } -> same_as<iter_difference_t<_Iter>>;
{ __i - __s } -> same_as<iter_difference_t<_Iter>>;
};
template<typename _Iter>
concept input_iterator = input_or_output_iterator<_Iter>
&& indirectly_readable<_Iter>
&& requires { typename __detail::__iter_concept<_Iter>; }
&& derived_from<__detail::__iter_concept<_Iter>, input_iterator_tag>;
template<typename _Iter, typename _Tp>
concept output_iterator = input_or_output_iterator<_Iter>
&& indirectly_writable<_Iter, _Tp>
&& requires(_Iter __i, _Tp&& __t) { *__i++ = std::forward<_Tp>(__t); };
template<typename _Iter>
concept forward_iterator = input_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>, forward_iterator_tag>
&& incrementable<_Iter> && sentinel_for<_Iter, _Iter>;
template<typename _Iter>
concept bidirectional_iterator = forward_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>,
bidirectional_iterator_tag>
&& requires(_Iter __i)
{
{ --__i } -> same_as<_Iter&>;
{ __i-- } -> same_as<_Iter>;
};
template<typename _Iter>
concept random_access_iterator = bidirectional_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>,
random_access_iterator_tag>
&& totally_ordered<_Iter> && sized_sentinel_for<_Iter, _Iter>
&& requires(_Iter __i, const _Iter __j,
const iter_difference_t<_Iter> __n)
{
{ __i += __n } -> same_as<_Iter&>;
{ __j + __n } -> same_as<_Iter>;
{ __n + __j } -> same_as<_Iter>;
{ __i -= __n } -> same_as<_Iter&>;
{ __j - __n } -> same_as<_Iter>;
{ __j[__n] } -> same_as<iter_reference_t<_Iter>>;
};
template<typename _Iter>
concept contiguous_iterator = random_access_iterator<_Iter>
&& derived_from<__detail::__iter_concept<_Iter>, contiguous_iterator_tag>
&& is_lvalue_reference_v<iter_reference_t<_Iter>>
&& same_as<iter_value_t<_Iter>, remove_cvref_t<iter_reference_t<_Iter>>>
&& requires(const _Iter& __i)
{
{ std::to_address(__i) }
-> same_as<add_pointer_t<iter_reference_t<_Iter>>>;
};
template<typename _Fn, typename _Iter>
concept indirectly_unary_invocable = indirectly_readable<_Iter>
&& copy_constructible<_Fn> && invocable<_Fn&, iter_value_t<_Iter>&>
&& invocable<_Fn&, iter_reference_t<_Iter>>
&& invocable<_Fn&, iter_common_reference_t<_Iter>>
&& common_reference_with<invoke_result_t<_Fn&, iter_value_t<_Iter>&>,
invoke_result_t<_Fn&, iter_reference_t<_Iter>>>;
template<typename _Fn, typename _Iter>
concept indirectly_regular_unary_invocable = indirectly_readable<_Iter>
&& copy_constructible<_Fn>
&& regular_invocable<_Fn&, iter_value_t<_Iter>&>
&& regular_invocable<_Fn&, iter_reference_t<_Iter>>
&& regular_invocable<_Fn&, iter_common_reference_t<_Iter>>
&& common_reference_with<invoke_result_t<_Fn&, iter_value_t<_Iter>&>,
invoke_result_t<_Fn&, iter_reference_t<_Iter>>>;
template<typename _Fn, typename _Iter>
concept indirect_unary_predicate = indirectly_readable<_Iter>
&& copy_constructible<_Fn> && predicate<_Fn&, iter_value_t<_Iter>&>
&& predicate<_Fn&, iter_reference_t<_Iter>>
&& predicate<_Fn&, iter_common_reference_t<_Iter>>;
template<typename _Fn, typename _I1, typename _I2>
concept indirect_binary_predicate
= indirectly_readable<_I1> && indirectly_readable<_I2>
&& copy_constructible<_Fn>
&& predicate<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&>
&& predicate<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>>
&& predicate<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&>
&& predicate<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>>
&& predicate<_Fn&, iter_common_reference_t<_I1>,
iter_common_reference_t<_I2>>;
template<typename _Fn, typename _I1, typename _I2 = _I1>
concept indirect_equivalence_relation
= indirectly_readable<_I1> && indirectly_readable<_I2>
&& copy_constructible<_Fn>
&& equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&>
&& equivalence_relation<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>>
&& equivalence_relation<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&>
&& equivalence_relation<_Fn&, iter_reference_t<_I1>,
iter_reference_t<_I2>>
&& equivalence_relation<_Fn&, iter_common_reference_t<_I1>,
iter_common_reference_t<_I2>>;
template<typename _Fn, typename _I1, typename _I2 = _I1>
concept indirect_strict_weak_order
= indirectly_readable<_I1> && indirectly_readable<_I2>
&& copy_constructible<_Fn>
&& strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_value_t<_I2>&>
&& strict_weak_order<_Fn&, iter_value_t<_I1>&, iter_reference_t<_I2>>
&& strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_value_t<_I2>&>
&& strict_weak_order<_Fn&, iter_reference_t<_I1>, iter_reference_t<_I2>>
&& strict_weak_order<_Fn&, iter_common_reference_t<_I1>,
iter_common_reference_t<_I2>>;
template<typename _Fn, typename... _Is>
requires (indirectly_readable<_Is> && ...)
&& invocable<_Fn, iter_reference_t<_Is>...>
using indirect_result_t = invoke_result_t<_Fn, iter_reference_t<_Is>...>;
namespace __detail
{
template<typename _Iter, typename _Proj>
struct __projected
{
struct __type
{
using value_type = remove_cvref_t<indirect_result_t<_Proj&, _Iter>>;
indirect_result_t<_Proj&, _Iter> operator*() const;
};
};
template<weakly_incrementable _Iter, typename _Proj>
struct __projected<_Iter, _Proj>
{
struct __type
{
using value_type = remove_cvref_t<indirect_result_t<_Proj&, _Iter>>;
using difference_type = iter_difference_t<_Iter>;
indirect_result_t<_Proj&, _Iter> operator*() const;
};
};
}
template<indirectly_readable _Iter,
indirectly_regular_unary_invocable<_Iter> _Proj>
using projected = typename __detail::__projected<_Iter, _Proj>::__type;
template<typename _In, typename _Out>
concept indirectly_movable = indirectly_readable<_In>
&& indirectly_writable<_Out, iter_rvalue_reference_t<_In>>;
template<typename _In, typename _Out>
concept indirectly_movable_storable = indirectly_movable<_In, _Out>
&& indirectly_writable<_Out, iter_value_t<_In>>
&& movable<iter_value_t<_In>>
&& constructible_from<iter_value_t<_In>, iter_rvalue_reference_t<_In>>
&& assignable_from<iter_value_t<_In>&, iter_rvalue_reference_t<_In>>;
template<typename _In, typename _Out>
concept indirectly_copyable = indirectly_readable<_In>
&& indirectly_writable<_Out, iter_reference_t<_In>>;
template<typename _In, typename _Out>
concept indirectly_copyable_storable = indirectly_copyable<_In, _Out>
&& indirectly_writable<_Out, iter_value_t<_In>&>
&& indirectly_writable<_Out, const iter_value_t<_In>&>
&& indirectly_writable<_Out, iter_value_t<_In>&&>
&& indirectly_writable<_Out, const iter_value_t<_In>&&>
&& copyable<iter_value_t<_In>>
&& constructible_from<iter_value_t<_In>, iter_reference_t<_In>>
&& assignable_from<iter_value_t<_In>&, iter_reference_t<_In>>;
namespace ranges
{
namespace __iswap
{
template<typename _It1, typename _It2>
void iter_swap(_It1, _It2) = delete;
template<typename _Tp, typename _Up>
concept __adl_iswap
= (std::__detail::__class_or_enum<remove_reference_t<_Tp>>
|| std::__detail::__class_or_enum<remove_reference_t<_Up>>)
&& requires(_Tp&& __t, _Up&& __u) {
iter_swap(static_cast<_Tp&&>(__t), static_cast<_Up&&>(__u));
};
template<typename _Xp, typename _Yp>
constexpr iter_value_t<_Xp>
__iter_exchange_move(_Xp&& __x, _Yp&& __y)
noexcept(noexcept(iter_value_t<_Xp>(iter_move(__x)))
&& noexcept(*__x = iter_move(__y)))
{
iter_value_t<_Xp> __old_value(iter_move(__x));
*__x = iter_move(__y);
return __old_value;
}
struct _IterSwap
{
private:
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept()
{
if constexpr (__adl_iswap<_Tp, _Up>)
return noexcept(iter_swap(std::declval<_Tp>(),
std::declval<_Up>()));
else if constexpr (indirectly_readable<_Tp>
&& indirectly_readable<_Up>
&& swappable_with<iter_reference_t<_Tp>, iter_reference_t<_Up>>)
return noexcept(ranges::swap(*std::declval<_Tp>(),
*std::declval<_Up>()));
else
return noexcept(*std::declval<_Tp>()
= __iswap::__iter_exchange_move(std::declval<_Up>(),
std::declval<_Tp>()));
}
public:
template<typename _Tp, typename _Up>
requires __adl_iswap<_Tp, _Up>
|| (indirectly_readable<remove_reference_t<_Tp>>
&& indirectly_readable<remove_reference_t<_Up>>
&& swappable_with<iter_reference_t<_Tp>, iter_reference_t<_Up>>)
|| (indirectly_movable_storable<_Tp, _Up>
&& indirectly_movable_storable<_Up, _Tp>)
constexpr void
operator()(_Tp&& __e1, _Up&& __e2) const
noexcept(_S_noexcept<_Tp, _Up>())
{
if constexpr (__adl_iswap<_Tp, _Up>)
iter_swap(static_cast<_Tp&&>(__e1), static_cast<_Up&&>(__e2));
else if constexpr (indirectly_readable<_Tp>
&& indirectly_readable<_Up>
&& swappable_with<iter_reference_t<_Tp>, iter_reference_t<_Up>>)
ranges::swap(*__e1, *__e2);
else
*__e1 = __iswap::__iter_exchange_move(__e2, __e1);
}
};
}
inline namespace _Cpo {
inline constexpr __iswap::_IterSwap iter_swap{};
}
}
template<typename _I1, typename _I2 = _I1>
concept indirectly_swappable
= indirectly_readable<_I1> && indirectly_readable<_I2>
&& requires(const _I1 __i1, const _I2 __i2)
{
ranges::iter_swap(__i1, __i1);
ranges::iter_swap(__i2, __i2);
ranges::iter_swap(__i1, __i2);
ranges::iter_swap(__i2, __i1);
};
template<typename _I1, typename _I2, typename _Rel, typename _P1 = identity,
typename _P2 = identity>
concept indirectly_comparable
= indirect_binary_predicate<_Rel, projected<_I1, _P1>,
projected<_I2, _P2>>;
template<typename _Iter>
concept permutable = forward_iterator<_Iter>
&& indirectly_movable_storable<_Iter, _Iter>
&& indirectly_swappable<_Iter, _Iter>;
template<typename _I1, typename _I2, typename _Out,
typename _Rel = ranges::less, typename _P1 = identity,
typename _P2 = identity>
concept mergeable = input_iterator<_I1> && input_iterator<_I2>
&& weakly_incrementable<_Out> && indirectly_copyable<_I1, _Out>
&& indirectly_copyable<_I2, _Out>
&& indirect_strict_weak_order<_Rel, projected<_I1, _P1>,
projected<_I2, _P2>>;
template<typename _Iter, typename _Rel = ranges::less,
typename _Proj = identity>
concept sortable = permutable<_Iter>
&& indirect_strict_weak_order<_Rel, projected<_Iter, _Proj>>;
struct unreachable_sentinel_t
{
template<weakly_incrementable _It>
friend constexpr bool
operator==(unreachable_sentinel_t, const _It&) noexcept
{ return false; }
};
inline constexpr unreachable_sentinel_t unreachable_sentinel{};
namespace ranges::__access
{
using std::__detail::__class_or_enum;
struct _Decay_copy final
{
template<typename _Tp>
constexpr decay_t<_Tp>
operator()(_Tp&& __t) const
noexcept(is_nothrow_convertible_v<_Tp, decay_t<_Tp>>)
{ return std::forward<_Tp>(__t); }
} inline constexpr __decay_copy{};
template<typename _Tp>
concept __member_begin = requires(_Tp& __t)
{
{ __decay_copy(__t.begin()) } -> input_or_output_iterator;
};
void begin() = delete;
template<typename _Tp>
concept __adl_begin = __class_or_enum<remove_reference_t<_Tp>>
&& requires(_Tp& __t)
{
{ __decay_copy(begin(__t)) } -> input_or_output_iterator;
};
template<typename _Tp>
requires is_array_v<_Tp> || __member_begin<_Tp&> || __adl_begin<_Tp&>
auto
__begin(_Tp& __t)
{
if constexpr (is_array_v<_Tp>)
return __t + 0;
else if constexpr (__member_begin<_Tp&>)
return __t.begin();
else
return begin(__t);
}
}
namespace __detail
{
template<typename _Tp>
using __range_iter_t
= decltype(ranges::__access::__begin(std::declval<_Tp&>()));
}
}
# 72 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 93 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
struct input_iterator_tag { };
struct output_iterator_tag { };
struct forward_iterator_tag : public input_iterator_tag { };
struct bidirectional_iterator_tag : public forward_iterator_tag { };
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
struct contiguous_iterator_tag : public random_access_iterator_tag { };
# 125 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
typename _Pointer = _Tp*, typename _Reference = _Tp&>
struct [[__deprecated__]] iterator
{
typedef _Category iterator_category;
typedef _Tp value_type;
typedef _Distance difference_type;
typedef _Pointer pointer;
typedef _Reference reference;
};
# 149 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
template<typename _Iterator>
struct iterator_traits;
template<typename _Iterator, typename = __void_t<>>
struct __iterator_traits { };
# 176 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
template<typename _Iterator>
struct iterator_traits
: public __iterator_traits<_Iterator> { };
# 194 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
template<typename _Tp>
requires is_object_v<_Tp>
struct iterator_traits<_Tp*>
{
using iterator_concept = contiguous_iterator_tag;
using iterator_category = random_access_iterator_tag;
using value_type = remove_cv_t<_Tp>;
using difference_type = ptrdiff_t;
using pointer = _Tp*;
using reference = _Tp&;
};
# 235 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
template<typename _Iter>
__attribute__((__always_inline__))
inline constexpr
typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{ return typename iterator_traits<_Iter>::iterator_category(); }
template<typename _Iter>
using __iter_category_t
= typename iterator_traits<_Iter>::iterator_category;
template<typename _InIter>
using _RequireInputIter =
__enable_if_t<is_convertible<__iter_category_t<_InIter>,
input_iterator_tag>::value>;
template<typename _It,
typename _Cat = __iter_category_t<_It>>
struct __is_random_access_iter
: is_base_of<random_access_iterator_tag, _Cat>
{
typedef is_base_of<random_access_iterator_tag, _Cat> _Base;
enum { __value = _Base::value };
};
# 270 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_types.h" 3
}
# 66 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 1 3
# 63 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/concept_check.h" 1 3
# 34 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/concept_check.h" 3
# 65 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/debug/assertions.h" 1 3
# 66 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template <typename> struct _List_iterator;
template <typename> struct _List_const_iterator;
template<typename _InputIterator>
inline constexpr
typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last,
input_iterator_tag)
{
typename iterator_traits<_InputIterator>::difference_type __n = 0;
while (__first != __last)
{
++__first;
++__n;
}
return __n;
}
template<typename _RandomAccessIterator>
__attribute__((__always_inline__))
inline constexpr
typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
random_access_iterator_tag)
{
return __last - __first;
}
template<typename _Tp>
ptrdiff_t
__distance(std::_List_iterator<_Tp>,
std::_List_iterator<_Tp>,
input_iterator_tag);
template<typename _Tp>
ptrdiff_t
__distance(std::_List_const_iterator<_Tp>,
std::_List_const_iterator<_Tp>,
input_iterator_tag);
template<typename _OutputIterator>
void
__distance(_OutputIterator, _OutputIterator, output_iterator_tag) = delete;
# 144 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 3
template<typename _InputIterator>
[[__nodiscard__]] __attribute__((__always_inline__))
inline constexpr
typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last)
{
return std::__distance(__first, __last,
std::__iterator_category(__first));
}
template<typename _InputIterator, typename _Distance>
inline constexpr void
__advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
{
do { if (std::__is_constant_evaluated()) if (__builtin_expect(!bool(__n >= 0), false)) std::__glibcxx_assert_fail(); } while (false);
while (__n--)
++__i;
}
template<typename _BidirectionalIterator, typename _Distance>
inline constexpr void
__advance(_BidirectionalIterator& __i, _Distance __n,
bidirectional_iterator_tag)
{
if (__n > 0)
while (__n--)
++__i;
else
while (__n++)
--__i;
}
template<typename _RandomAccessIterator, typename _Distance>
inline constexpr void
__advance(_RandomAccessIterator& __i, _Distance __n,
random_access_iterator_tag)
{
if (__builtin_constant_p(__n) && __n == 1)
++__i;
else if (__builtin_constant_p(__n) && __n == -1)
--__i;
else
__i += __n;
}
template<typename _OutputIterator, typename _Distance>
void
__advance(_OutputIterator&, _Distance, output_iterator_tag) = delete;
# 217 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator_base_funcs.h" 3
template<typename _InputIterator, typename _Distance>
__attribute__((__always_inline__))
inline constexpr void
advance(_InputIterator& __i, _Distance __n)
{
typename iterator_traits<_InputIterator>::difference_type __d = __n;
std::__advance(__i, __d, std::__iterator_category(__i));
}
template<typename _InputIterator>
[[__nodiscard__]] [[__gnu__::__always_inline__]]
inline constexpr _InputIterator
next(_InputIterator __x, typename
iterator_traits<_InputIterator>::difference_type __n = 1)
{
std::advance(__x, __n);
return __x;
}
template<typename _BidirectionalIterator>
[[__nodiscard__]] [[__gnu__::__always_inline__]]
inline constexpr _BidirectionalIterator
prev(_BidirectionalIterator __x, typename
iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
{
std::advance(__x, -__n);
return __x;
}
}
# 67 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_algobase.h" 2 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 1 3
# 78 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
# 1 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h" 1 3
# 73 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h" 3
namespace std __attribute__ ((__visibility__ ("default")))
{
template <typename _Tp>
constexpr inline void
destroy_at(_Tp* __location)
{
if constexpr (202002L > 201703L && is_array_v<_Tp>)
{
for (auto& __x : *__location)
std::destroy_at(std::__addressof(__x));
}
else
__location->~_Tp();
}
template<typename _Tp, typename... _Args>
constexpr auto
construct_at(_Tp* __location, _Args&&... __args)
noexcept(noexcept(::new((void*)0) _Tp(std::declval<_Args>()...)))
-> decltype(::new((void*)0) _Tp(std::declval<_Args>()...))
{ return ::new((void*)__location) _Tp(std::forward<_Args>(__args)...); }
# 106 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h" 3
template<typename _Tp, typename... _Args>
constexpr
inline void
_Construct(_Tp* __p, _Args&&... __args)
{
if (std::__is_constant_evaluated())
{
std::construct_at(__p, std::forward<_Args>(__args)...);
return;
}
::new((void*)__p) _Tp(std::forward<_Args>(__args)...);
}
# 132 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_construct.h" 3
template<typename _T1>
inline void
_Construct_novalue(_T1* __p)
{ ::new((void*)__p) _T1; }
template<typename _ForwardIterator>
constexpr void
_Destroy(_ForwardIterator __first, _ForwardIterator __last);
template<typename _Tp>
constexpr inline void
_Destroy(_Tp* __pointer)
{
std::destroy_at(__pointer);
}
template<bool>
struct _Destroy_aux
{
template<typename _ForwardIterator>
static constexpr void
__destroy(_ForwardIterator __first, _ForwardIterator __last)
{
for (; __first != __last; ++__first)
std::_Destroy(std::__addressof(*__first));
}
};
template<>
struct _Destroy_aux<true>
{
template<typename _ForwardIterator>
static void
__destroy(_ForwardIterator, _ForwardIterator) { }
};
template<typename _ForwardIterator>
constexpr inline void
_Destroy(_ForwardIterator __first, _ForwardIterator __last)
{
typedef typename iterator_traits<_ForwardIterator>::value_type
_Value_type;
static_assert(is_destructible<_Value_type>::value,
"value type is destructible");
if (std::__is_constant_evaluated())
return std::_Destroy_aux<false>::__destroy(__first, __last);
std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
__destroy(__first, __last);
}
template<bool>
struct _Destroy_n_aux
{
template<typename _ForwardIterator, typename _Size>
static constexpr _ForwardIterator
__destroy_n(_ForwardIterator __first, _Size __count)
{
for (; __count > 0; (void)++__first, --__count)
std::_Destroy(std::__addressof(*__first));
return __first;
}
};
template<>
struct _Destroy_n_aux<true>
{
template<typename _ForwardIterator, typename _Size>
static _ForwardIterator
__destroy_n(_ForwardIterator __first, _Size __count)
{
std::advance(__first, __count);
return __first;
}
};
template<typename _ForwardIterator, typename _Size>
constexpr inline _ForwardIterator
_Destroy_n(_ForwardIterator __first, _Size __count)
{
typedef typename iterator_traits<_ForwardIterator>::value_type
_Value_type;
static_assert(is_destructible<_Value_type>::value,
"value type is destructible");
if (std::__is_constant_evaluated())
return std::_Destroy_n_aux<false>::__destroy_n(__first, __count);
return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
__destroy_n(__first, __count);
}
template <typename _ForwardIterator>
constexpr inline void
destroy(_ForwardIterator __first, _ForwardIterator __last)
{
std::_Destroy(__first, __last);
}
template <typename _ForwardIterator, typename _Size>
constexpr inline _ForwardIterator
destroy_n(_ForwardIterator __first, _Size __count)
{
return std::_Destroy_n(__first, __count);
}
}
# 79 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 2 3
namespace std __attribute__ ((__visibility__ ("default")))
{
# 95 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
namespace __detail
{
template<typename _Cat, typename _Limit, typename _Otherwise = _Cat>
using __clamp_iter_cat
= __conditional_t<derived_from<_Cat, _Limit>, _Limit, _Otherwise>;
}
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
# 128 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Iterator>
class reverse_iterator
: public iterator<typename iterator_traits<_Iterator>::iterator_category,
typename iterator_traits<_Iterator>::value_type,
typename iterator_traits<_Iterator>::difference_type,
typename iterator_traits<_Iterator>::pointer,
typename iterator_traits<_Iterator>::reference>
{
template<typename _Iter>
friend class reverse_iterator;
template<typename _Iter>
static constexpr bool __convertible = !is_same_v<_Iter, _Iterator>
&& convertible_to<const _Iter&, _Iterator>;
protected:
_Iterator current;
typedef iterator_traits<_Iterator> __traits_type;
public:
typedef _Iterator iterator_type;
typedef typename __traits_type::pointer pointer;
using iterator_concept
= __conditional_t<random_access_iterator<_Iterator>,
random_access_iterator_tag,
bidirectional_iterator_tag>;
using iterator_category
= __detail::__clamp_iter_cat<typename __traits_type::iterator_category,
random_access_iterator_tag>;
using value_type = iter_value_t<_Iterator>;
using difference_type = iter_difference_t<_Iterator>;
using reference = iter_reference_t<_Iterator>;
# 178 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
constexpr
reverse_iterator()
noexcept(noexcept(_Iterator()))
: current()
{ }
explicit constexpr
reverse_iterator(iterator_type __x)
noexcept(noexcept(_Iterator(__x)))
: current(__x)
{ }
constexpr
reverse_iterator(const reverse_iterator& __x)
noexcept(noexcept(_Iterator(__x.current)))
: current(__x.current)
{ }
reverse_iterator& operator=(const reverse_iterator&) = default;
template<typename _Iter>
requires __convertible<_Iter>
constexpr
reverse_iterator(const reverse_iterator<_Iter>& __x)
noexcept(noexcept(_Iterator(__x.current)))
: current(__x.current)
{ }
template<typename _Iter>
requires __convertible<_Iter>
&& assignable_from<_Iterator&, const _Iter&>
constexpr
reverse_iterator&
operator=(const reverse_iterator<_Iter>& __x)
noexcept(noexcept(current = __x.current))
{
current = __x.current;
return *this;
}
[[__nodiscard__]]
constexpr iterator_type
base() const
noexcept(noexcept(_Iterator(current)))
{ return current; }
# 255 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
[[__nodiscard__]]
constexpr reference
operator*() const
{
_Iterator __tmp = current;
return *--__tmp;
}
[[__nodiscard__]]
constexpr pointer
operator->() const
requires is_pointer_v<_Iterator>
|| requires(const _Iterator __i) { __i.operator->(); }
{
_Iterator __tmp = current;
--__tmp;
return _S_to_pointer(__tmp);
}
constexpr reverse_iterator&
operator++()
{
--current;
return *this;
}
constexpr reverse_iterator
operator++(int)
{
reverse_iterator __tmp = *this;
--current;
return __tmp;
}
constexpr reverse_iterator&
operator--()
{
++current;
return *this;
}
constexpr reverse_iterator
operator--(int)
{
reverse_iterator __tmp = *this;
++current;
return __tmp;
}
[[__nodiscard__]]
constexpr reverse_iterator
operator+(difference_type __n) const
{ return reverse_iterator(current - __n); }
constexpr reverse_iterator&
operator+=(difference_type __n)
{
current -= __n;
return *this;
}
[[__nodiscard__]]
constexpr reverse_iterator
operator-(difference_type __n) const
{ return reverse_iterator(current + __n); }
constexpr reverse_iterator&
operator-=(difference_type __n)
{
current += __n;
return *this;
}
[[__nodiscard__]]
constexpr reference
operator[](difference_type __n) const
{ return *(*this + __n); }
[[nodiscard]]
friend constexpr iter_rvalue_reference_t<_Iterator>
iter_move(const reverse_iterator& __i)
noexcept(is_nothrow_copy_constructible_v<_Iterator>
&& noexcept(ranges::iter_move(--std::declval<_Iterator&>())))
{
auto __tmp = __i.base();
return ranges::iter_move(--__tmp);
}
template<indirectly_swappable<_Iterator> _Iter2>
friend constexpr void
iter_swap(const reverse_iterator& __x,
const reverse_iterator<_Iter2>& __y)
noexcept(is_nothrow_copy_constructible_v<_Iterator>
&& is_nothrow_copy_constructible_v<_Iter2>
&& noexcept(ranges::iter_swap(--std::declval<_Iterator&>(),
--std::declval<_Iter2&>())))
{
auto __xtmp = __x.base();
auto __ytmp = __y.base();
ranges::iter_swap(--__xtmp, --__ytmp);
}
private:
template<typename _Tp>
static constexpr _Tp*
_S_to_pointer(_Tp* __p)
{ return __p; }
template<typename _Tp>
static constexpr pointer
_S_to_pointer(_Tp __t)
{ return __t.operator->(); }
};
# 524 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator==(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
{ return __x.base() == __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator!=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() != __y.base() } -> convertible_to<bool>; }
{ return __x.base() != __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator<(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() > __y.base() } -> convertible_to<bool>; }
{ return __x.base() > __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator>(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
{ return __x.base() < __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator<=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() >= __y.base() } -> convertible_to<bool>; }
{ return __x.base() >= __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[nodiscard]]
constexpr bool
operator>=(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
requires requires { { __x.base() <= __y.base() } -> convertible_to<bool>; }
{ return __x.base() <= __y.base(); }
template<typename _IteratorL,
three_way_comparable_with<_IteratorL> _IteratorR>
[[nodiscard]]
constexpr compare_three_way_result_t<_IteratorL, _IteratorR>
operator<=>(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
{ return __y.base() <=> __x.base(); }
template<typename _Iterator>
[[nodiscard]]
constexpr bool
operator==(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
{ return __x.base() == __y.base(); }
template<three_way_comparable _Iterator>
[[nodiscard]]
constexpr compare_three_way_result_t<_Iterator, _Iterator>
operator<=>(const reverse_iterator<_Iterator>& __x,
const reverse_iterator<_Iterator>& __y)
{ return __y.base() <=> __x.base(); }
# 615 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr auto
operator-(const reverse_iterator<_IteratorL>& __x,
const reverse_iterator<_IteratorR>& __y)
-> decltype(__y.base() - __x.base())
{ return __y.base() - __x.base(); }
template<typename _Iterator>
[[__nodiscard__]]
inline constexpr reverse_iterator<_Iterator>
operator+(typename reverse_iterator<_Iterator>::difference_type __n,
const reverse_iterator<_Iterator>& __x)
{ return reverse_iterator<_Iterator>(__x.base() - __n); }
template<typename _Iterator>
inline constexpr reverse_iterator<_Iterator>
__make_reverse_iterator(_Iterator __i)
{ return reverse_iterator<_Iterator>(__i); }
template<typename _Iterator>
[[__nodiscard__]]
inline constexpr reverse_iterator<_Iterator>
make_reverse_iterator(_Iterator __i)
{ return reverse_iterator<_Iterator>(__i); }
template<typename _Iterator1, typename _Iterator2>
requires (!sized_sentinel_for<_Iterator1, _Iterator2>)
inline constexpr bool
disable_sized_sentinel_for<reverse_iterator<_Iterator1>,
reverse_iterator<_Iterator2>> = true;
template<typename _Iterator>
constexpr
auto
__niter_base(reverse_iterator<_Iterator> __it)
-> decltype(__make_reverse_iterator(__niter_base(__it.base())))
{ return __make_reverse_iterator(__niter_base(__it.base())); }
template<typename _Iterator>
struct __is_move_iterator<reverse_iterator<_Iterator> >
: __is_move_iterator<_Iterator>
{ };
template<typename _Iterator>
constexpr
auto
__miter_base(reverse_iterator<_Iterator> __it)
-> decltype(__make_reverse_iterator(__miter_base(__it.base())))
{ return __make_reverse_iterator(__miter_base(__it.base())); }
# 688 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
class back_insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container;
public:
typedef _Container container_type;
using difference_type = ptrdiff_t;
explicit constexpr
back_insert_iterator(_Container& __x)
: container(std::__addressof(__x)) { }
# 726 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
constexpr
back_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_back(__value);
return *this;
}
constexpr
back_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
container->push_back(std::move(__value));
return *this;
}
[[__nodiscard__]] constexpr
back_insert_iterator&
operator*()
{ return *this; }
constexpr
back_insert_iterator&
operator++()
{ return *this; }
constexpr
back_insert_iterator
operator++(int)
{ return *this; }
};
# 773 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
[[__nodiscard__]] constexpr
inline back_insert_iterator<_Container>
back_inserter(_Container& __x)
{ return back_insert_iterator<_Container>(__x); }
# 789 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
class front_insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
protected:
_Container* container;
public:
typedef _Container container_type;
using difference_type = ptrdiff_t;
explicit constexpr
front_insert_iterator(_Container& __x)
: container(std::__addressof(__x)) { }
# 827 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
constexpr
front_insert_iterator&
operator=(const typename _Container::value_type& __value)
{
container->push_front(__value);
return *this;
}
constexpr
front_insert_iterator&
operator=(typename _Container::value_type&& __value)
{
container->push_front(std::move(__value));
return *this;
}
[[__nodiscard__]] constexpr
front_insert_iterator&
operator*()
{ return *this; }
constexpr
front_insert_iterator&
operator++()
{ return *this; }
constexpr
front_insert_iterator
operator++(int)
{ return *this; }
};
# 874 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
[[__nodiscard__]] constexpr
inline front_insert_iterator<_Container>
front_inserter(_Container& __x)
{ return front_insert_iterator<_Container>(__x); }
# 894 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
class insert_iterator
: public iterator<output_iterator_tag, void, void, void, void>
{
using _Iter = std::__detail::__range_iter_t<_Container>;
protected:
_Container* container;
_Iter iter;
public:
typedef _Container container_type;
using difference_type = ptrdiff_t;
constexpr
insert_iterator(_Container& __x, _Iter __i)
: container(std::__addressof(__x)), iter(__i) {}
# 955 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
constexpr
insert_iterator&
operator=(const typename _Container::value_type& __value)
{
iter = container->insert(iter, __value);
++iter;
return *this;
}
constexpr
insert_iterator&
operator=(typename _Container::value_type&& __value)
{
iter = container->insert(iter, std::move(__value));
++iter;
return *this;
}
[[__nodiscard__]] constexpr
insert_iterator&
operator*()
{ return *this; }
constexpr
insert_iterator&
operator++()
{ return *this; }
constexpr
insert_iterator&
operator++(int)
{ return *this; }
};
#pragma GCC diagnostic pop
# 1008 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Container>
[[nodiscard]]
constexpr insert_iterator<_Container>
inserter(_Container& __x, std::__detail::__range_iter_t<_Container> __i)
{ return insert_iterator<_Container>(__x, __i); }
# 1024 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
}
namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
{
# 1037 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Iterator, typename _Container>
class __normal_iterator
{
protected:
_Iterator _M_current;
typedef std::iterator_traits<_Iterator> __traits_type;
template<typename _Iter>
using __convertible_from
= std::__enable_if_t<std::is_convertible<_Iter, _Iterator>::value>;
public:
typedef _Iterator iterator_type;
typedef typename __traits_type::iterator_category iterator_category;
typedef typename __traits_type::value_type value_type;
typedef typename __traits_type::difference_type difference_type;
typedef typename __traits_type::reference reference;
typedef typename __traits_type::pointer pointer;
using iterator_concept = std::__detail::__iter_concept<_Iterator>;
constexpr __normal_iterator() noexcept
: _M_current(_Iterator()) { }
explicit constexpr
__normal_iterator(const _Iterator& __i) noexcept
: _M_current(__i) { }
template<typename _Iter, typename = __convertible_from<_Iter>>
constexpr
__normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
noexcept
# 1085 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
: _M_current(__i.base()) { }
constexpr
reference
operator*() const noexcept
{ return *_M_current; }
constexpr
pointer
operator->() const noexcept
{ return _M_current; }
constexpr
__normal_iterator&
operator++() noexcept
{
++_M_current;
return *this;
}
constexpr
__normal_iterator
operator++(int) noexcept
{ return __normal_iterator(_M_current++); }
constexpr
__normal_iterator&
operator--() noexcept
{
--_M_current;
return *this;
}
constexpr
__normal_iterator
operator--(int) noexcept
{ return __normal_iterator(_M_current--); }
constexpr
reference
operator[](difference_type __n) const noexcept
{ return _M_current[__n]; }
constexpr
__normal_iterator&
operator+=(difference_type __n) noexcept
{ _M_current += __n; return *this; }
constexpr
__normal_iterator
operator+(difference_type __n) const noexcept
{ return __normal_iterator(_M_current + __n); }
constexpr
__normal_iterator&
operator-=(difference_type __n) noexcept
{ _M_current -= __n; return *this; }
constexpr
__normal_iterator
operator-(difference_type __n) const noexcept
{ return __normal_iterator(_M_current - __n); }
constexpr
const _Iterator&
base() const noexcept
{ return _M_current; }
};
# 1166 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR, typename _Container>
[[nodiscard]]
constexpr bool
operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept(noexcept(__lhs.base() == __rhs.base()))
requires requires {
{ __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
}
{ return __lhs.base() == __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Container>
[[nodiscard]]
constexpr std::__detail::__synth3way_t<_IteratorR, _IteratorL>
operator<=>(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs)
noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
{ return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
template<typename _Iterator, typename _Container>
[[nodiscard]]
constexpr bool
operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept(noexcept(__lhs.base() == __rhs.base()))
requires requires {
{ __lhs.base() == __rhs.base() } -> std::convertible_to<bool>;
}
{ return __lhs.base() == __rhs.base(); }
template<typename _Iterator, typename _Container>
[[nodiscard]]
constexpr std::__detail::__synth3way_t<_Iterator>
operator<=>(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept(noexcept(std::__detail::__synth3way(__lhs.base(), __rhs.base())))
{ return std::__detail::__synth3way(__lhs.base(), __rhs.base()); }
# 1307 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR, typename _Container>
[[__nodiscard__]] constexpr
inline auto
operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
-> decltype(__lhs.base() - __rhs.base())
{ return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Container>
[[__nodiscard__]] constexpr
inline typename __normal_iterator<_Iterator, _Container>::difference_type
operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
const __normal_iterator<_Iterator, _Container>& __rhs)
noexcept
{ return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Container>
[[__nodiscard__]] constexpr
inline __normal_iterator<_Iterator, _Container>
operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
__n, const __normal_iterator<_Iterator, _Container>& __i)
noexcept
{ return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
namespace std __attribute__ ((__visibility__ ("default")))
{
template<typename _Iterator, typename _Container>
constexpr
_Iterator
__niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
noexcept(std::is_nothrow_copy_constructible<_Iterator>::value)
{ return __it.base(); }
# 1371 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<semiregular _Sent>
class move_sentinel
{
public:
constexpr
move_sentinel()
noexcept(is_nothrow_default_constructible_v<_Sent>)
: _M_last() { }
constexpr explicit
move_sentinel(_Sent __s)
noexcept(is_nothrow_move_constructible_v<_Sent>)
: _M_last(std::move(__s)) { }
template<typename _S2> requires convertible_to<const _S2&, _Sent>
constexpr
move_sentinel(const move_sentinel<_S2>& __s)
noexcept(is_nothrow_constructible_v<_Sent, const _S2&>)
: _M_last(__s.base())
{ }
template<typename _S2> requires assignable_from<_Sent&, const _S2&>
constexpr move_sentinel&
operator=(const move_sentinel<_S2>& __s)
noexcept(is_nothrow_assignable_v<_Sent, const _S2&>)
{
_M_last = __s.base();
return *this;
}
[[nodiscard]]
constexpr _Sent
base() const
noexcept(is_nothrow_copy_constructible_v<_Sent>)
{ return _M_last; }
private:
_Sent _M_last;
};
namespace __detail
{
template<typename _Iterator>
struct __move_iter_cat
{ };
template<typename _Iterator>
requires requires { typename __iter_category_t<_Iterator>; }
struct __move_iter_cat<_Iterator>
{
using iterator_category
= __clamp_iter_cat<__iter_category_t<_Iterator>,
random_access_iterator_tag>;
};
}
# 1439 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _Iterator>
class move_iterator
: public __detail::__move_iter_cat<_Iterator>
{
_Iterator _M_current;
using __traits_type = iterator_traits<_Iterator>;
template<typename _Iter2>
friend class move_iterator;
template<typename _Iter2>
static constexpr bool __convertible = !is_same_v<_Iter2, _Iterator>
&& convertible_to<const _Iter2&, _Iterator>;
static auto
_S_iter_concept()
{
if constexpr (random_access_iterator<_Iterator>)
return random_access_iterator_tag{};
else if constexpr (bidirectional_iterator<_Iterator>)
return bidirectional_iterator_tag{};
else if constexpr (forward_iterator<_Iterator>)
return forward_iterator_tag{};
else
return input_iterator_tag{};
}
public:
using iterator_type = _Iterator;
using iterator_concept = decltype(_S_iter_concept());
using value_type = iter_value_t<_Iterator>;
using difference_type = iter_difference_t<_Iterator>;
using pointer = _Iterator;
using reference = iter_rvalue_reference_t<_Iterator>;
# 1503 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
constexpr
move_iterator()
: _M_current() { }
explicit constexpr
move_iterator(iterator_type __i)
: _M_current(std::move(__i)) { }
template<typename _Iter>
requires __convertible<_Iter>
constexpr
move_iterator(const move_iterator<_Iter>& __i)
: _M_current(__i._M_current) { }
template<typename _Iter>
requires __convertible<_Iter>
&& assignable_from<_Iterator&, const _Iter&>
constexpr
move_iterator& operator=(const move_iterator<_Iter>& __i)
{
_M_current = __i._M_current;
return *this;
}
[[nodiscard]]
constexpr const iterator_type&
base() const & noexcept
{ return _M_current; }
[[nodiscard]]
constexpr iterator_type
base() &&
{ return std::move(_M_current); }
[[__nodiscard__]]
constexpr reference
operator*() const
{ return ranges::iter_move(_M_current); }
[[__nodiscard__]]
constexpr pointer
operator->() const
{ return _M_current; }
constexpr move_iterator&
operator++()
{
++_M_current;
return *this;
}
constexpr move_iterator
operator++(int)
{
move_iterator __tmp = *this;
++_M_current;
return __tmp;
}
constexpr void
operator++(int) requires (!forward_iterator<_Iterator>)
{ ++_M_current; }
constexpr move_iterator&
operator--()
{
--_M_current;
return *this;
}
constexpr move_iterator
operator--(int)
{
move_iterator __tmp = *this;
--_M_current;
return __tmp;
}
[[__nodiscard__]]
constexpr move_iterator
operator+(difference_type __n) const
{ return move_iterator(_M_current + __n); }
constexpr move_iterator&
operator+=(difference_type __n)
{
_M_current += __n;
return *this;
}
[[__nodiscard__]]
constexpr move_iterator
operator-(difference_type __n) const
{ return move_iterator(_M_current - __n); }
constexpr move_iterator&
operator-=(difference_type __n)
{
_M_current -= __n;
return *this;
}
[[__nodiscard__]]
constexpr reference
operator[](difference_type __n) const
{ return ranges::iter_move(_M_current + __n); }
template<sentinel_for<_Iterator> _Sent>
[[nodiscard]]
friend constexpr bool
operator==(const move_iterator& __x, const move_sentinel<_Sent>& __y)
{ return __x.base() == __y.base(); }
template<sized_sentinel_for<_Iterator> _Sent>
[[nodiscard]]
friend constexpr iter_difference_t<_Iterator>
operator-(const move_sentinel<_Sent>& __x, const move_iterator& __y)
{ return __x.base() - __y.base(); }
template<sized_sentinel_for<_Iterator> _Sent>
[[nodiscard]]
friend constexpr iter_difference_t<_Iterator>
operator-(const move_iterator& __x, const move_sentinel<_Sent>& __y)
{ return __x.base() - __y.base(); }
[[nodiscard]]
friend constexpr iter_rvalue_reference_t<_Iterator>
iter_move(const move_iterator& __i)
noexcept(noexcept(ranges::iter_move(__i._M_current)))
{ return ranges::iter_move(__i._M_current); }
template<indirectly_swappable<_Iterator> _Iter2>
friend constexpr void
iter_swap(const move_iterator& __x, const move_iterator<_Iter2>& __y)
noexcept(noexcept(ranges::iter_swap(__x._M_current, __y._M_current)))
{ return ranges::iter_swap(__x._M_current, __y._M_current); }
};
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr bool
operator==(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
requires requires { { __x.base() == __y.base() } -> convertible_to<bool>; }
{ return __x.base() == __y.base(); }
template<typename _IteratorL,
three_way_comparable_with<_IteratorL> _IteratorR>
[[__nodiscard__]]
constexpr compare_three_way_result_t<_IteratorL, _IteratorR>
operator<=>(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
{ return __x.base() <=> __y.base(); }
# 1691 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr bool
operator<(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
{ return __x.base() < __y.base(); }
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr bool
operator<=(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
requires requires { { __y.base() < __x.base() } -> convertible_to<bool>; }
{ return !(__y < __x); }
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr bool
operator>(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
requires requires { { __y.base() < __x.base() } -> convertible_to<bool>; }
{ return __y < __x; }
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr bool
operator>=(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
requires requires { { __x.base() < __y.base() } -> convertible_to<bool>; }
{ return !(__x < __y); }
template<typename _Iterator>
[[__nodiscard__]]
inline constexpr bool
operator==(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return __x.base() == __y.base(); }
template<three_way_comparable _Iterator>
[[__nodiscard__]]
constexpr compare_three_way_result_t<_Iterator>
operator<=>(const move_iterator<_Iterator>& __x,
const move_iterator<_Iterator>& __y)
{ return __x.base() <=> __y.base(); }
# 1786 "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.2.1/../../../../include/c++/14.2.1/bits/stl_iterator.h" 3
template<typename _IteratorL, typename _IteratorR>
[[__nodiscard__]]
inline constexpr auto
operator-(const move_iterator<_IteratorL>& __x,
const move_iterator<_IteratorR>& __y)
-> decltype(__x.base() - __y.base())
{ return __x.base() - __y.base(); }
template<typename _Iterator>
[[__nodiscard__]]
inline constexpr move_iterator<_Iterator>
operator+(typename move_iterator<_Iterator>::difference_type __n,
const move_iterator<_Iterator>& __x)
{ return __x + __n; }
template<typename _Iterator>
[[__nodiscard__]]
inline constexpr move_iterator<_Iterator>
make_move_iterator(_Iterator __i)
{ return move_iterator<_Iterator>(std::move(__i)); }
template<typename _Iterator, typename _ReturnType
= __conditional_t<__move_if_noexcept_cond
<typename iterator_traits<_Iterator>::value_type>::value,
_Iterator, move_iterator<_Iterator>>>
inline constexpr _ReturnType
__make_move_if_noexcept_iterator(_Iterator __i)
{ return _ReturnType(__i); }
template<typename _Tp, typename _ReturnType
= __conditional_t<__move_if_noexcept_cond<_Tp>::value,
const _Tp*, move_iterator<_Tp*>>>
inline constexpr _ReturnType
__make_move_if_noexcept_iterator(_Tp* __i)
{ return _ReturnType(__i); }
namespace __detail
{
template<typename _It>
concept __common_iter_has_arrow = indirectly_readable<const _It>
&& (requires(const _It& __it) { __it.operator->(); }
|| is_reference_v<iter_reference_t<_It>>
|| constructible_from<iter_value_t<_It>, iter_reference_t<_It>>);
template<typename _It>
concept __common_iter_use_postfix_proxy
= (!requires (_It& __i) { { *__i++ } -> __can_reference; })
&& constructible_from<iter_value_t<_It>, iter_reference_t<_It>>
&& move_constructible<iter_value_t<_It>>;
}
template<input_or_output_iterator _It, sentinel_for<_It> _Sent>
requires (!same_as<_It, _Sent>) && copyable<_It>
class common_iterator
{
template<typename _Tp, typename _Up>
static constexpr bool
_S_noexcept1()
{
if constexpr (is_trivially_default_constructible_v<_Tp>)
return is_nothrow_assignable_v<_Tp&, _Up>;
else
return is_nothrow_constructible_v<_Tp, _Up>;
}
template<typename _It2, typename _Sent2>
static constexpr bool
_S_noexcept()
{ return _S_noexcept1<_It, _It2>() && _S_noexcept1<_Sent, _Sent2>(); }
class __arrow_proxy
{
iter_value_t<_It> _M_keep;
constexpr
__arrow_proxy(iter_reference_t<_It>&& __x)
: _M_keep(std::move(__x)) { }
friend class common_iterator;
public:
constexpr const iter_value_t<_It>*
operator->() const noexcept
{ return std::__addressof(_M_keep); }
};
class __postfix_proxy
{
iter_value_t<_It> _M_keep;
constexpr
__postfix_proxy(iter_reference_t<_It>&& __x)
: _M_keep(std::forward<iter_reference_t<_It>>(__x)) { }
friend class common_iterator;
public:
constexpr const iter_value_t<_It>&
operator*() const noexcept
{ return _M_keep; }
};