(i) < a.size()))
throw index_range_exception("index exceeds range");
}
pointer_type p;
index_type i;
static decltype(get_global_array(pointer_type())) get_array()
{
return get_global_array(pointer_type());
}
};
#define _DEFINE_VALPTRIDX_SUBTYPE_USERTYPE(N,P,I,A,name,Pconst) \
static inline decltype(A) Pconst &get_global_array(P Pconst*) { return A; } \
\
struct name : valptridx_t { \
name() = delete; \
DXX_INHERIT_CONSTRUCTORS(name, valptridx_t
); \
}; \
\
static inline name N(name::pointer_type o, name::index_type i) { \
return {A, o, i}; \
} \
\
#define DEFINE_VALPTRIDX_SUBTYPE(N,P,I,A) \
_DEFINE_VALPTRIDX_SUBTYPE_USERTYPE(N,P,I,A,N##_t,); \
_DEFINE_VALPTRIDX_SUBTYPE_USERTYPE(N,P,I,A,c##N##_t,const); \