40 #ifndef LIBPMEMOBJ_CPP_SPECIALIZATION_HPP
41 #define LIBPMEMOBJ_CPP_SPECIALIZATION_HPP
58 struct sp_element<T[]> {
62 template <
typename T, std::
size_t N>
63 struct sp_element<T[N]> {
70 struct sp_dereference {
75 struct sp_dereference<void> {
80 struct sp_dereference<void const> {
85 struct sp_dereference<void volatile> {
90 struct sp_dereference<void const volatile> {
95 struct sp_dereference<T[]> {
99 template <
typename T, std::
size_t N>
100 struct sp_dereference<T[N]> {
106 template <
typename T>
107 struct sp_member_access {
111 template <
typename T>
112 struct sp_member_access<T[]> {
116 template <
typename T, std::
size_t N>
117 struct sp_member_access<T[N]> {
123 template <
typename T>
124 struct sp_array_access {
129 struct sp_array_access<void> {
130 typedef struct does_not_exist {
134 template <
typename T>
135 struct sp_array_access<T[]> {
139 template <
typename T, std::
size_t N>
140 struct sp_array_access<T[N]> {
146 template <
typename T>
148 enum _vt { value = 0 };
151 template <
typename T, std::
size_t N>
152 struct sp_extent<T[N]> {
153 enum _vt { value = N };