15#ifndef GPUCOMMONTYPETRAITS_H
16#define GPUCOMMONTYPETRAITS_H
20#if !defined(GPUCA_GPUCODE_DEVICE) || defined(__CUDACC__) || defined(__HIPCC__)
21#ifndef GPUCA_GPUCODE_COMPILEKERNELS
30#define GPUCA_TT_PROGRAMSCOPE constant
32#define GPUCA_TT_PROGRAMSCOPE
36template <
bool B,
class T,
class F>
40template <
class T,
class F>
41struct conditional<false,
T, F> {
44template <
bool B,
class T,
class F>
45using conditional_t =
typename conditional<B, T, F>::type;
47template <
class T,
class U>
49 enum {
value =
false };
53 enum {
value =
true };
55template <
class T,
class U>
56GPUCA_TT_PROGRAMSCOPE
static constexpr bool is_same_v = is_same<T, U>::value;
58template <
bool B,
class T =
void>
62struct enable_if<
true,
T> {
71struct remove_cv<const
T> {
75struct remove_cv<volatile
T> {
79struct remove_cv<const volatile
T> {
83using remove_cv_t =
typename remove_cv<T>::type;
90struct remove_const<const
T> {
94using remove_const_t =
typename remove_const<T>::type;
97struct remove_volatile {
101struct remove_volatile<volatile
T> {
105using remove_volatile_t =
typename remove_volatile<T>::type;
109 enum {
value =
false };
112struct is_pointer_t<
T*> {
113 enum {
value =
true };
120 enum {
value = metal::is_pointer<T>::value };
122 enum {
value = is_pointer_t<typename std::remove_cv<T>::type>
::value };
127struct remove_reference {
131struct remove_reference<
T&> {
135struct remove_reference<
T&&> {
139using remove_reference_t =
typename remove_reference<T>::type;
142struct is_member_pointer_helper {
143 enum {
value =
false };
145template <
class T,
class U>
146struct is_member_pointer_helper<
T U::*> {
147 enum {
value =
true };
150struct is_member_pointer {
151 enum {
value = is_member_pointer_helper<typename std::remove_cv<T>::type>
::value };
154GPUCA_TT_PROGRAMSCOPE
static constexpr bool is_member_pointer_v = is_member_pointer<T>::value;
157#undef GPUCA_TT_PROGRAMSCOPE
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type