Skip to content

Instantly share code, notes, and snippets.

@nsauzede
Forked from Eczbek/meta_type.h
Created June 4, 2026 08:35
Show Gist options
  • Select an option

  • Save nsauzede/bc1635484f431c2d2dca142249af46f2 to your computer and use it in GitHub Desktop.

Select an option

Save nsauzede/bc1635484f431c2d2dca142249af46f2 to your computer and use it in GitHub Desktop.
#define meta_is_same_type(X, ...) _Generic(typeof(X),typeof(__VA_ARGS__):meta_is_unbounded_array_type(X)==meta_is_unbounded_array_type(__VA_ARGS__),default:0)
#define meta_is_same_type_unqual(X, ...) _Generic(typeof_unqual(X),typeof_unqual(__VA_ARGS__):meta_is_unbounded_array_type(X)==meta_is_unbounded_array_type(__VA_ARGS__),default:0)
#define meta_is_const(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))const:1,default:0)
#define meta_is_volatile(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))volatile:1,default:0)
#define meta_is_const_volatile(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))const volatile:1,default:0)
#define meta_is_atomic(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0)))_Atomic:1,default:0)
#define meta_is_const_atomic(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0)))const _Atomic:1,default:0)
#define meta_is_volatile_atomic(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0)))volatile _Atomic:1,default:0)
#define meta_is_const_volatile_atomic(...) _Generic(typeof(__VA_ARGS__),typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0)))const volatile _Atomic:1,default:0)
#define meta_is_restrict(...) _Generic(typeof(__VA_ARGS__),meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile_atomic(typeof_unqual(__VA_ARGS__)),meta_add_volatile_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__)))),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile(typeof_unqual(__VA_ARGS__)),meta_add_volatile(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))):0,default:1)
#define meta_is_const_restrict(...) (meta_is_const(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_volatile_restrict(...) (meta_is_volatile(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_const_volatile_restrict(...) (meta_is_const_volatile(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_atomic_restrict(...) (meta_is_atomic(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_const_atomic_restrict(...) (meta_is_const_atomic(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_volatile_atomic_restrict(...) (meta_is_volatile_atomic(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_const_volatile_atomic_restrict(...) (meta_is_const_volatile_atomic(__VA_ARGS__)&&meta_is_restrict(__VA_ARGS__))
#define meta_is_unsigned_type(...) _Generic(typeof_unqual(__VA_ARGS__),unsigned char:1,unsigned short:1,unsigned int:1,unsigned long:1,unsigned long long:1,default:0)
#define meta_is_signed_type(...) _Generic(typeof_unqual(__VA_ARGS__),signed char:1,short:1,int:1,long:1,long long:1,default:0)
#define meta_is_int_type(...) _Generic(typeof_unqual(__VA_ARGS__),unsigned char:1,unsigned short:1,unsigned int:1,unsigned long:1,unsigned long long:1,signed char:1,short:1,int:1,long:1,long long:1,default:0)
#define meta_is_float_type(...) _Generic(typeof_unqual(__VA_ARGS__),float:1,double:1,long double:1,default:0)
#define meta_is_function_type(...) _Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:1,default:0)
#define meta_is_array_type(...) _Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):0,default:1))
#define meta_is_bounded_array_type(...) _Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):0,default:!meta_is_unbounded_array_type(__VA_ARGS__)))
#define meta_is_unbounded_array_type(...) _Generic(typeof(__VA_ARGS__),typeof(*_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):(int*)0,default:_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:(int*)0,default:meta_fake(__VA_ARGS__))))[1]:_Generic(typeof(__VA_ARGS__),typeof(*_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):(int*)0,default:_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:(int*)0,default:meta_fake(__VA_ARGS__))))[2]:1,default:0),default:0)
#define meta_add_const(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:meta_fake(typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))const)))
#define meta_add_volatile(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:meta_fake(typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))volatile)))
#define meta_add_const_volatile(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:meta_fake(typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(__VA_ARGS__)))const volatile)))
#define meta_add_atomic(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(typeof(_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0))_Atomic)),default:meta_fake(__VA_ARGS__))))
#define meta_add_const_atomic(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(typeof(_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0))const _Atomic)),default:meta_fake(__VA_ARGS__))))
#define meta_add_volatile_atomic(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(typeof(_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0))volatile _Atomic)),default:meta_fake(__VA_ARGS__))))
#define meta_add_const_volatile_atomic(...) typeof(_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:meta_fake(__VA_ARGS__),default:_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):_Generic(meta_fake(__VA_ARGS__),typeof(__VA_ARGS__)*:0,default:meta_fake(typeof(_Generic(typeof_unqual(__VA_ARGS__),typeof_unqual(meta_decay_type(__VA_ARGS__)):meta_fake(__VA_ARGS__),default:0))const volatile _Atomic)),default:meta_fake(__VA_ARGS__))))
#define meta_drop_const(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))),int*)restrict,meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))))
#define meta_drop_volatile(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))),int*)restrict,meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))))
#define meta_drop_const_volatile(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_add_atomic(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)),int*)restrict,meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_add_atomic(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_atomic(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile(typeof_unqual(__VA_ARGS__)),meta_add_volatile(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))),int*)restrict,meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile(typeof_unqual(__VA_ARGS__)),meta_add_volatile(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))))
#define meta_drop_const_atomic(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)),int*)restrict,meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_volatile_atomic(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)),int*)restrict,meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_const_volatile_atomic(...) meta_choose_type(meta_is_restrict(__VA_ARGS__),meta_choose_type(meta_is_restrict(__VA_ARGS__),typeof_unqual(__VA_ARGS__),int*)restrict,typeof_unqual(__VA_ARGS__))
#define meta_drop_restrict(...) meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile_atomic(typeof_unqual(__VA_ARGS__)),meta_add_volatile_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__)))),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile(typeof_unqual(__VA_ARGS__)),meta_add_volatile(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))))
#define meta_drop_const_restrict(...) meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_volatile_restrict(...) meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_atomic(typeof_unqual(__VA_ARGS__)),meta_add_atomic(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_const_volatile_restrict(...) meta_choose_type(meta_is_atomic(__VA_ARGS__),meta_add_atomic(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))
#define meta_drop_atomic_restrict(...) meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const_volatile(typeof_unqual(__VA_ARGS__)),meta_add_volatile(typeof_unqual(__VA_ARGS__))),meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__)))
#define meta_drop_const_atomic_restrict(...) meta_choose_type(meta_is_volatile(__VA_ARGS__),meta_add_volatile(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))
#define meta_drop_volatile_atomic_restrict(...) meta_choose_type(meta_is_const(__VA_ARGS__),meta_add_const(typeof_unqual(__VA_ARGS__)),typeof_unqual(__VA_ARGS__))
#define meta_drop_const_volatile_atomic_restrict(...) typeof_unqual(__VA_ARGS__)
#define meta_decay_type(...) typeof(_Generic(typeof_unqual(__VA_ARGS__),unsigned char:meta_fake(__VA_ARGS__),unsigned short:meta_fake(__VA_ARGS__),signed char:meta_fake(__VA_ARGS__),short:meta_fake(__VA_ARGS__),char:meta_fake(__VA_ARGS__),bool:meta_fake(__VA_ARGS__),default:0?meta_fake(__VA_ARGS__):meta_fake(__VA_ARGS__)))
#define meta_array_extent(...) (sizeof(meta_choose_expr(meta_is_bounded_array_type(__VA_ARGS__),meta_fake(__VA_ARGS__),0))/sizeof(*meta_fake(meta_choose_type(meta_is_bounded_array_type(__VA_ARGS__),typeof(__VA_ARGS__),int(*)[2]))))
#define meta_array_value_type(...) meta_choose_type(meta_is_array_type(__VA_ARGS__),*meta_fake(meta_choose_type(meta_is_array_type(__VA_ARGS__),typeof(__VA_ARGS__),(int*)0)),void)
#define meta_choose_expr(COND, X, ...) _Generic(int[1+!(COND)],int[1]:(X),default:(__VA_ARGS__))
#define meta_choose_type(COND, X, ...) typeof(meta_choose_expr((COND),meta_fake(X),meta_fake(__VA_ARGS__)))
#define meta_fake(...) (*(typeof(__VA_ARGS__)*)0)
#define meta_fake_unqual(...) (*(typeof_unqual(__VA_ARGS__)*)0)
#define meta_is_type_name(NAME) (!meta_is_same_type(int(int(NAME)),int(int)))
static_assert(meta_is_same_type(int, int));
static_assert(!meta_is_same_type(int, char));
static_assert(!meta_is_same_type(int, const int));
static_assert(!meta_is_same_type(int, int*));
static_assert(meta_is_same_type(int*, int*));
static_assert(!meta_is_same_type(int*, const int*));
static_assert(!meta_is_same_type(int*, int* const));
static_assert(meta_is_same_type(int(int), int(int)));
static_assert(meta_is_same_type(int(int), int(const int)));
static_assert(!meta_is_same_type(int(int), int(char)));
static_assert(!meta_is_same_type(int(int), int));
static_assert(!meta_is_same_type(int(int), int(*)(int)));
static_assert(meta_is_same_type(int[], int[]));
static_assert(!meta_is_same_type(int[], int));
static_assert(meta_is_same_type(int[3], int[3]));
static_assert(!meta_is_same_type(int[3], int));
static_assert(!meta_is_same_type(int[3], int*));
static_assert(!meta_is_same_type(int[3], int[]));
static_assert(meta_is_same_type(42, int));
static_assert(meta_is_same_type("Hello", char[6]));
static_assert(meta_is_same_type_unqual(int, const volatile _Atomic int));
static_assert(meta_is_same_type_unqual(int[], const int[]));
static_assert(!meta_is_same_type_unqual(int(int*), int(const int*)));
static_assert(!meta_is_const(int));
static_assert(meta_is_const(const int));
static_assert(!meta_is_const(volatile int));
static_assert(meta_is_const(const volatile int));
static_assert(!meta_is_const(_Atomic int));
static_assert(meta_is_const(const _Atomic int));
static_assert(!meta_is_const(volatile _Atomic int));
static_assert(meta_is_const(const volatile _Atomic int));
static_assert(!meta_is_const(int* restrict));
static_assert(meta_is_const(int* const restrict));
static_assert(!meta_is_const(int* volatile restrict));
static_assert(meta_is_const(int* const volatile restrict));
static_assert(!meta_is_const(int* _Atomic restrict));
static_assert(meta_is_const(int* const _Atomic restrict));
static_assert(!meta_is_const(int* volatile _Atomic restrict));
static_assert(meta_is_const(int* const volatile _Atomic restrict));
static_assert(!meta_is_const(int(int)));
static_assert(!meta_is_volatile(int));
static_assert(!meta_is_volatile(const int));
static_assert(meta_is_volatile(volatile int));
static_assert(meta_is_volatile(const volatile int));
static_assert(!meta_is_volatile(_Atomic int));
static_assert(!meta_is_volatile(const _Atomic int));
static_assert(meta_is_volatile(volatile _Atomic int));
static_assert(meta_is_volatile(const volatile _Atomic int));
static_assert(!meta_is_volatile(int* restrict));
static_assert(!meta_is_volatile(int* const restrict));
static_assert(meta_is_volatile(int* volatile restrict));
static_assert(meta_is_volatile(int* const volatile restrict));
static_assert(!meta_is_volatile(int* _Atomic restrict));
static_assert(!meta_is_volatile(int* const _Atomic restrict));
static_assert(meta_is_volatile(int* volatile _Atomic restrict));
static_assert(meta_is_volatile(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_volatile(int));
static_assert(!meta_is_const_volatile(const int));
static_assert(!meta_is_const_volatile(volatile int));
static_assert(meta_is_const_volatile(const volatile int));
static_assert(!meta_is_const_volatile(_Atomic int));
static_assert(!meta_is_const_volatile(const _Atomic int));
static_assert(!meta_is_const_volatile(volatile _Atomic int));
static_assert(meta_is_const_volatile(const volatile _Atomic int));
static_assert(!meta_is_const_volatile(int* restrict));
static_assert(!meta_is_const_volatile(int* const restrict));
static_assert(!meta_is_const_volatile(int* volatile restrict));
static_assert(meta_is_const_volatile(int* const volatile restrict));
static_assert(!meta_is_const_volatile(int* _Atomic restrict));
static_assert(!meta_is_const_volatile(int* const _Atomic restrict));
static_assert(!meta_is_const_volatile(int* volatile _Atomic restrict));
static_assert(meta_is_const_volatile(int* const volatile _Atomic restrict));
static_assert(!meta_is_atomic(int));
static_assert(!meta_is_atomic(const int));
static_assert(!meta_is_atomic(volatile int));
static_assert(!meta_is_atomic(const volatile int));
static_assert(meta_is_atomic(_Atomic int));
static_assert(meta_is_atomic(const _Atomic int));
static_assert(meta_is_atomic(volatile _Atomic int));
static_assert(meta_is_atomic(const volatile _Atomic int));
static_assert(!meta_is_atomic(int* restrict));
static_assert(!meta_is_atomic(int* const restrict));
static_assert(!meta_is_atomic(int* volatile restrict));
static_assert(!meta_is_atomic(int* const volatile restrict));
static_assert(meta_is_atomic(int* _Atomic restrict));
static_assert(meta_is_atomic(int* const _Atomic restrict));
static_assert(meta_is_atomic(int* volatile _Atomic restrict));
static_assert(meta_is_atomic(int* const volatile _Atomic restrict));
static_assert(!meta_is_atomic(int[]));
static_assert(!meta_is_atomic(int(int)));
static_assert(!meta_is_const_atomic(int));
static_assert(!meta_is_const_atomic(const int));
static_assert(!meta_is_const_atomic(volatile int));
static_assert(!meta_is_const_atomic(const volatile int));
static_assert(!meta_is_const_atomic(_Atomic int));
static_assert(meta_is_const_atomic(const _Atomic int));
static_assert(!meta_is_const_atomic(volatile _Atomic int));
static_assert(meta_is_const_atomic(const volatile _Atomic int));
static_assert(!meta_is_const_atomic(int* restrict));
static_assert(!meta_is_const_atomic(int* const restrict));
static_assert(!meta_is_const_atomic(int* volatile restrict));
static_assert(!meta_is_const_atomic(int* const volatile restrict));
static_assert(!meta_is_const_atomic(int* _Atomic restrict));
static_assert(meta_is_const_atomic(int* const _Atomic restrict));
static_assert(!meta_is_const_atomic(int* volatile _Atomic restrict));
static_assert(meta_is_const_atomic(int* const volatile _Atomic restrict));
static_assert(!meta_is_volatile_atomic(int));
static_assert(!meta_is_volatile_atomic(const int));
static_assert(!meta_is_volatile_atomic(volatile int));
static_assert(!meta_is_volatile_atomic(const volatile int));
static_assert(!meta_is_volatile_atomic(_Atomic int));
static_assert(!meta_is_volatile_atomic(const _Atomic int));
static_assert(meta_is_volatile_atomic(volatile _Atomic int));
static_assert(meta_is_volatile_atomic(const volatile _Atomic int));
static_assert(!meta_is_volatile_atomic(int* restrict));
static_assert(!meta_is_volatile_atomic(int* const restrict));
static_assert(!meta_is_volatile_atomic(int* volatile restrict));
static_assert(!meta_is_volatile_atomic(int* const volatile restrict));
static_assert(!meta_is_volatile_atomic(int* _Atomic restrict));
static_assert(!meta_is_volatile_atomic(int* const _Atomic restrict));
static_assert(meta_is_volatile_atomic(int* volatile _Atomic restrict));
static_assert(meta_is_volatile_atomic(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic(int));
static_assert(!meta_is_const_volatile_atomic(const int));
static_assert(!meta_is_const_volatile_atomic(volatile int));
static_assert(!meta_is_const_volatile_atomic(const volatile int));
static_assert(!meta_is_const_volatile_atomic(_Atomic int));
static_assert(!meta_is_const_volatile_atomic(const _Atomic int));
static_assert(!meta_is_const_volatile_atomic(volatile _Atomic int));
static_assert(meta_is_const_volatile_atomic(const volatile _Atomic int));
static_assert(!meta_is_const_volatile_atomic(int* restrict));
static_assert(!meta_is_const_volatile_atomic(int* const restrict));
static_assert(!meta_is_const_volatile_atomic(int* volatile restrict));
static_assert(!meta_is_const_volatile_atomic(int* const volatile restrict));
static_assert(!meta_is_const_volatile_atomic(int* _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic(int* const _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic(int* volatile _Atomic restrict));
static_assert(meta_is_const_volatile_atomic(int* const volatile _Atomic restrict));
static_assert(!meta_is_restrict(int));
static_assert(!meta_is_restrict(const int));
static_assert(!meta_is_restrict(volatile int));
static_assert(!meta_is_restrict(const volatile int));
static_assert(!meta_is_restrict(_Atomic int));
static_assert(!meta_is_restrict(const _Atomic int));
static_assert(!meta_is_restrict(volatile _Atomic int));
static_assert(!meta_is_restrict(const volatile _Atomic int));
static_assert(meta_is_restrict(int* restrict));
static_assert(meta_is_restrict(int* const restrict));
static_assert(meta_is_restrict(int* volatile restrict));
static_assert(meta_is_restrict(int* const volatile restrict));
static_assert(meta_is_restrict(int* _Atomic restrict));
static_assert(meta_is_restrict(int* const _Atomic restrict));
static_assert(meta_is_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_restrict(int));
static_assert(!meta_is_const_restrict(const int));
static_assert(!meta_is_const_restrict(volatile int));
static_assert(!meta_is_const_restrict(const volatile int));
static_assert(!meta_is_const_restrict(_Atomic int));
static_assert(!meta_is_const_restrict(const _Atomic int));
static_assert(!meta_is_const_restrict(volatile _Atomic int));
static_assert(!meta_is_const_restrict(const volatile _Atomic int));
static_assert(!meta_is_const_restrict(int* restrict));
static_assert(meta_is_const_restrict(int* const restrict));
static_assert(!meta_is_const_restrict(int* volatile restrict));
static_assert(meta_is_const_restrict(int* const volatile restrict));
static_assert(!meta_is_const_restrict(int* _Atomic restrict));
static_assert(meta_is_const_restrict(int* const _Atomic restrict));
static_assert(!meta_is_const_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_const_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_volatile_restrict(int));
static_assert(!meta_is_volatile_restrict(const int));
static_assert(!meta_is_volatile_restrict(volatile int));
static_assert(!meta_is_volatile_restrict(const volatile int));
static_assert(!meta_is_volatile_restrict(_Atomic int));
static_assert(!meta_is_volatile_restrict(const _Atomic int));
static_assert(!meta_is_volatile_restrict(volatile _Atomic int));
static_assert(!meta_is_volatile_restrict(const volatile _Atomic int));
static_assert(!meta_is_volatile_restrict(int* restrict));
static_assert(!meta_is_volatile_restrict(int* const restrict));
static_assert(meta_is_volatile_restrict(int* volatile restrict));
static_assert(meta_is_volatile_restrict(int* const volatile restrict));
static_assert(!meta_is_volatile_restrict(int* _Atomic restrict));
static_assert(!meta_is_volatile_restrict(int* const _Atomic restrict));
static_assert(meta_is_volatile_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_volatile_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_volatile_restrict(int));
static_assert(!meta_is_const_volatile_restrict(const int));
static_assert(!meta_is_const_volatile_restrict(volatile int));
static_assert(!meta_is_const_volatile_restrict(const volatile int));
static_assert(!meta_is_const_volatile_restrict(_Atomic int));
static_assert(!meta_is_const_volatile_restrict(const _Atomic int));
static_assert(!meta_is_const_volatile_restrict(volatile _Atomic int));
static_assert(!meta_is_const_volatile_restrict(const volatile _Atomic int));
static_assert(!meta_is_const_volatile_restrict(int* restrict));
static_assert(!meta_is_const_volatile_restrict(int* const restrict));
static_assert(!meta_is_const_volatile_restrict(int* volatile restrict));
static_assert(meta_is_const_volatile_restrict(int* const volatile restrict));
static_assert(!meta_is_const_volatile_restrict(int* _Atomic restrict));
static_assert(!meta_is_const_volatile_restrict(int* const _Atomic restrict));
static_assert(!meta_is_const_volatile_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_const_volatile_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_atomic_restrict(int));
static_assert(!meta_is_atomic_restrict(const int));
static_assert(!meta_is_atomic_restrict(volatile int));
static_assert(!meta_is_atomic_restrict(const volatile int));
static_assert(!meta_is_atomic_restrict(_Atomic int));
static_assert(!meta_is_atomic_restrict(const _Atomic int));
static_assert(!meta_is_atomic_restrict(volatile _Atomic int));
static_assert(!meta_is_atomic_restrict(const volatile _Atomic int));
static_assert(!meta_is_atomic_restrict(int* restrict));
static_assert(!meta_is_atomic_restrict(int* const restrict));
static_assert(!meta_is_atomic_restrict(int* volatile restrict));
static_assert(!meta_is_atomic_restrict(int* const volatile restrict));
static_assert(meta_is_atomic_restrict(int* _Atomic restrict));
static_assert(meta_is_atomic_restrict(int* const _Atomic restrict));
static_assert(meta_is_atomic_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_atomic_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_atomic_restrict(int));
static_assert(!meta_is_const_atomic_restrict(const int));
static_assert(!meta_is_const_atomic_restrict(volatile int));
static_assert(!meta_is_const_atomic_restrict(const volatile int));
static_assert(!meta_is_const_atomic_restrict(_Atomic int));
static_assert(!meta_is_const_atomic_restrict(const _Atomic int));
static_assert(!meta_is_const_atomic_restrict(volatile _Atomic int));
static_assert(!meta_is_const_atomic_restrict(const volatile _Atomic int));
static_assert(!meta_is_const_atomic_restrict(int* restrict));
static_assert(!meta_is_const_atomic_restrict(int* const restrict));
static_assert(!meta_is_const_atomic_restrict(int* volatile restrict));
static_assert(!meta_is_const_atomic_restrict(int* const volatile restrict));
static_assert(!meta_is_const_atomic_restrict(int* _Atomic restrict));
static_assert(meta_is_const_atomic_restrict(int* const _Atomic restrict));
static_assert(!meta_is_const_atomic_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_const_atomic_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_volatile_atomic_restrict(int));
static_assert(!meta_is_volatile_atomic_restrict(const int));
static_assert(!meta_is_volatile_atomic_restrict(volatile int));
static_assert(!meta_is_volatile_atomic_restrict(const volatile int));
static_assert(!meta_is_volatile_atomic_restrict(_Atomic int));
static_assert(!meta_is_volatile_atomic_restrict(const _Atomic int));
static_assert(!meta_is_volatile_atomic_restrict(volatile _Atomic int));
static_assert(!meta_is_volatile_atomic_restrict(const volatile _Atomic int));
static_assert(!meta_is_volatile_atomic_restrict(int* restrict));
static_assert(!meta_is_volatile_atomic_restrict(int* const restrict));
static_assert(!meta_is_volatile_atomic_restrict(int* volatile restrict));
static_assert(!meta_is_volatile_atomic_restrict(int* const volatile restrict));
static_assert(!meta_is_volatile_atomic_restrict(int* _Atomic restrict));
static_assert(!meta_is_volatile_atomic_restrict(int* const _Atomic restrict));
static_assert(meta_is_volatile_atomic_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_volatile_atomic_restrict(int* const volatile _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int));
static_assert(!meta_is_const_volatile_atomic_restrict(const int));
static_assert(!meta_is_const_volatile_atomic_restrict(volatile int));
static_assert(!meta_is_const_volatile_atomic_restrict(const volatile int));
static_assert(!meta_is_const_volatile_atomic_restrict(_Atomic int));
static_assert(!meta_is_const_volatile_atomic_restrict(const _Atomic int));
static_assert(!meta_is_const_volatile_atomic_restrict(volatile _Atomic int));
static_assert(!meta_is_const_volatile_atomic_restrict(const volatile _Atomic int));
static_assert(!meta_is_const_volatile_atomic_restrict(int* restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* const restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* volatile restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* const volatile restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* const _Atomic restrict));
static_assert(!meta_is_const_volatile_atomic_restrict(int* volatile _Atomic restrict));
static_assert(meta_is_const_volatile_atomic_restrict(int* const volatile _Atomic restrict));
static_assert(meta_is_unsigned_type(unsigned char));
static_assert(meta_is_unsigned_type(unsigned short));
static_assert(meta_is_unsigned_type(unsigned int));
static_assert(meta_is_unsigned_type(unsigned long));
static_assert(meta_is_unsigned_type(unsigned long long));
static_assert(!meta_is_unsigned_type(char));
static_assert(!meta_is_unsigned_type(char));
static_assert(!meta_is_unsigned_type(short));
static_assert(!meta_is_unsigned_type(int));
static_assert(!meta_is_unsigned_type(long));
static_assert(!meta_is_unsigned_type(long long));
static_assert(meta_is_signed_type(signed char));
static_assert(meta_is_signed_type(short));
static_assert(meta_is_signed_type(int));
static_assert(meta_is_signed_type(long));
static_assert(meta_is_signed_type(long long));
static_assert(!meta_is_signed_type(char));
static_assert(!meta_is_signed_type(unsigned char));
static_assert(!meta_is_signed_type(unsigned short));
static_assert(!meta_is_signed_type(unsigned int));
static_assert(!meta_is_signed_type(unsigned long));
static_assert(!meta_is_signed_type(unsigned long long));
static_assert(meta_is_int_type(int));
static_assert(meta_is_int_type(const int));
static_assert(!meta_is_int_type(int*));
static_assert(!meta_is_int_type(int[]));
static_assert(!meta_is_int_type(int(int)));
static_assert(!meta_is_float_type(int));
static_assert(meta_is_float_type(float));
static_assert(meta_is_float_type(double));
static_assert(meta_is_float_type(long double));
static_assert(!meta_is_function_type(int));
static_assert(meta_is_function_type(int(int)));
static_assert(!meta_is_function_type(int(*)(int)));
static_assert(!meta_is_array_type(int));
static_assert(!meta_is_array_type(int*));
static_assert(meta_is_array_type(int[]));
static_assert(meta_is_array_type(int[3]));
static_assert(!meta_is_array_type(int(int)));
static_assert(!meta_is_bounded_array_type(int));
static_assert(meta_is_bounded_array_type(int[3]));
static_assert(!meta_is_bounded_array_type(int[]));
static_assert(!meta_is_bounded_array_type(int(int)));
static_assert(!meta_is_unbounded_array_type(int));
static_assert(!meta_is_unbounded_array_type(int[3]));
static_assert(meta_is_unbounded_array_type(int[]));
static_assert(!meta_is_unbounded_array_type(int(int)));
static_assert(meta_array_extent(int[3]) == 3);
static_assert(meta_array_extent(int[]) == 0);
static_assert(meta_is_same_type(meta_array_value_type(int[]), int));
static_assert(meta_is_same_type(meta_array_value_type(int[3]), int));
static_assert(meta_is_same_type(meta_array_value_type("Hello"), char));
static_assert(meta_is_same_type(meta_array_value_type(const volatile int[]), const volatile int));
static_assert(meta_is_same_type(meta_array_value_type(int), void));
static_assert(meta_is_same_type(meta_decay_type(int), int));
static_assert(meta_is_same_type(meta_decay_type(char), char));
static_assert(meta_is_same_type(meta_decay_type(int[]), int*));
static_assert(meta_is_same_type(meta_decay_type(int[3]), int*));
static_assert(meta_is_same_type(meta_decay_type(int(int)), int(*)(int)));
static_assert(meta_is_same_type(meta_add_const(int), const int));
static_assert(meta_is_same_type(meta_add_const(const int), const int));
static_assert(meta_is_same_type(meta_add_const(volatile int), const volatile int));
static_assert(meta_is_same_type(meta_add_const(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_add_const(_Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const(volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const(int* restrict), int* const restrict));
static_assert(meta_is_same_type(meta_add_const(int* const restrict), int* const restrict));
static_assert(meta_is_same_type(meta_add_const(int* volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const(int* const volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const(int* _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const(int* const _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const(int* volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile(int), volatile int));
static_assert(meta_is_same_type(meta_add_volatile(const int), const volatile int));
static_assert(meta_is_same_type(meta_add_volatile(volatile int), volatile int));
static_assert(meta_is_same_type(meta_add_volatile(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_add_volatile(_Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile(const _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile(int* restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* const restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* const volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* const _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* volatile _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int), const volatile int));
static_assert(meta_is_same_type(meta_add_const_volatile(const int), const volatile int));
static_assert(meta_is_same_type(meta_add_const_volatile(volatile int), const volatile int));
static_assert(meta_is_same_type(meta_add_const_volatile(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_add_const_volatile(_Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile(const _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile(volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile(int* restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* const restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* const volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* const _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int), _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(const int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(volatile int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(const volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_atomic(int* restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* const restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* volatile restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* const volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* const _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* volatile _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_atomic(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(const int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(const volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(_Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_atomic(int* restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* const restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* const volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* const _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_atomic(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(const int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(volatile int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(const volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(_Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(const _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* const restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* volatile restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* const volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* const _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* volatile _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_volatile_atomic(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(const int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(const volatile int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(_Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(const _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* const restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* const volatile restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* const _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_add_const_volatile_atomic(int* const volatile _Atomic restrict), int* const volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const(int), int));
static_assert(meta_is_same_type(meta_drop_const(const int), int));
static_assert(meta_is_same_type(meta_drop_const(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const(const volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const(const _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_const(const volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_const(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const(int* const restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const(int* volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_const(int* const volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_const(int* _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const(int* const _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const(int* volatile _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const(int* const volatile _Atomic restrict), int* volatile _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int), int));
static_assert(meta_is_same_type(meta_drop_volatile(const int), const int));
static_assert(meta_is_same_type(meta_drop_volatile(volatile int), int));
static_assert(meta_is_same_type(meta_drop_volatile(const volatile int), const int));
static_assert(meta_is_same_type(meta_drop_volatile(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile(volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile(const volatile _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* const restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* const volatile restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* const _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* volatile _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_volatile(int* const volatile _Atomic restrict), int* const _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile(const int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile(volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile(const volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile(const _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile(volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile(const volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* const restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* const volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* const _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* volatile _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile(int* const volatile _Atomic restrict), int* _Atomic restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int), int));
static_assert(meta_is_same_type(meta_drop_atomic(const int), const int));
static_assert(meta_is_same_type(meta_drop_atomic(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_atomic(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_drop_atomic(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_atomic(const _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_atomic(volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_atomic(const volatile _Atomic int), const volatile int));
static_assert(meta_is_same_type(meta_drop_atomic(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* const restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* const volatile restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* const _Atomic restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* volatile _Atomic restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_atomic(int* const volatile _Atomic restrict), int* const volatile restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic(const int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic(const volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic(const _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic(volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic(const volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* const restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* const volatile restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* const _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* volatile _Atomic restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_const_atomic(int* const volatile _Atomic restrict), int* volatile restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(const int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(volatile int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(const volatile int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(const _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(const volatile _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* const restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* const volatile restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* const _Atomic restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* volatile _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_volatile_atomic(int* const volatile _Atomic restrict), int* const restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(const int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(const volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(const _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(const volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* const restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* const volatile restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* const _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* volatile _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic(int* const volatile _Atomic restrict), int* restrict));
static_assert(meta_is_same_type(meta_drop_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_restrict(const int), const int));
static_assert(meta_is_same_type(meta_drop_restrict(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_restrict(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_drop_restrict(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_restrict(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_drop_restrict(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_restrict(const volatile _Atomic int), const volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_restrict(int* const restrict), int* const));
static_assert(meta_is_same_type(meta_drop_restrict(int* volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_restrict(int* const volatile restrict), int* const volatile));
static_assert(meta_is_same_type(meta_drop_restrict(int* _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_restrict(int* const _Atomic restrict), int* const _Atomic));
static_assert(meta_is_same_type(meta_drop_restrict(int* volatile _Atomic restrict), int* volatile _Atomic));
static_assert(meta_is_same_type(meta_drop_restrict(int* const volatile _Atomic restrict), int* const volatile _Atomic));
static_assert(meta_is_same_type(meta_drop_const_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_const_restrict(const int), int));
static_assert(meta_is_same_type(meta_drop_const_restrict(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_restrict(const volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_restrict(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_restrict(const _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_restrict(volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_restrict(const volatile _Atomic int), volatile _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* const restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* const volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* const _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* volatile _Atomic restrict), int* volatile _Atomic));
static_assert(meta_is_same_type(meta_drop_const_restrict(int* const volatile _Atomic restrict), int* volatile _Atomic));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(const int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(volatile int), int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(const volatile int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(const _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(const volatile _Atomic int), const _Atomic int));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* const restrict), int* const));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* const volatile restrict), int* const));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* const _Atomic restrict), int* const _Atomic));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* volatile _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_volatile_restrict(int* const volatile _Atomic restrict), int* const _Atomic));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(const int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(const volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(_Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(const _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(const volatile _Atomic int), _Atomic int));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* const restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* const volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* const _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* volatile _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_const_volatile_restrict(int* const volatile _Atomic restrict), int* _Atomic));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(const int), const int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(const volatile int), const volatile int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(const _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(const volatile _Atomic int), const volatile int));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* const restrict), int* const));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* const volatile restrict), int* const volatile));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* const _Atomic restrict), int* const));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* volatile _Atomic restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_atomic_restrict(int* const volatile _Atomic restrict), int* const volatile));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(const int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(const volatile int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(const _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(const volatile _Atomic int), volatile int));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* const restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* const volatile restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* const _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* volatile _Atomic restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_const_atomic_restrict(int* const volatile _Atomic restrict), int* volatile));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(const int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(volatile int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(const volatile int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(const _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(const volatile _Atomic int), const int));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* const restrict), int* const));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* const volatile restrict), int* const));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* const _Atomic restrict), int* const));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* volatile _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_volatile_atomic_restrict(int* const volatile _Atomic restrict), int* const));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(const int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(const volatile int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(_Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(const _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(const volatile _Atomic int), int));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* const restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* const volatile restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* const _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* volatile _Atomic restrict), int*));
static_assert(meta_is_same_type(meta_drop_const_volatile_atomic_restrict(int* const volatile _Atomic restrict), int*));
static_assert(meta_is_same_type(typeof(meta_fake(int) + 1), int));
static_assert(meta_is_same_type(typeof(meta_fake(*meta_fake(const int*))), const int));
static_assert(meta_is_same_type(typeof(meta_fake_unqual(*meta_fake(const int*))), int));
static_assert(meta_choose_expr(true, 1, 2) == 1);
static_assert(meta_choose_expr(false, 1, 2) == 2);
static_assert(meta_is_same_type(meta_choose_type(true, int, char), int));
static_assert(meta_is_same_type(meta_choose_type(false, int, char), char));
static_assert(!meta_is_type_name(T));
typedef int T;
static_assert(meta_is_type_name(T));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment