39 #include <type_traits>
55 template<
typename T,
typename V>
60 static constexpr
bool test(
typename A::value_type * ptr) {
61 return is_same<decltype(ptr),V *>::value;
63 static constexpr
bool test(...) {
66 static const bool value = test<T>(
nullptr);
80 static constexpr
bool test(decltype(declval<A>().size()) * ptr) {
81 return is_same<decltype(ptr),size_t *>::value;
83 static constexpr
bool test(...) {
87 static const bool value = test<T>(
nullptr);
101 auto test( decltype(&declval<A>()[
size_t(0)]) ptr) ->
102 decltype(is_same<decltype(*ptr),
typename A::value_type &>::value)
104 return is_same<decltype(*ptr),typename A::value_type &>::value;
107 static constexpr
bool test(...) {
111 static const bool value = test<T>(
nullptr);
119 template<
typename T>
124 static constexpr
auto test(decltype(declval<A const>().data()) ptr) ->
125 decltype(is_same<decltype(ptr),
typename A::value_type
const *>::value)
127 return is_same<decltype(ptr),typename A::value_type const *>::value;
130 static constexpr
bool test(...) {
134 static const bool value = test<T>(
nullptr);
142 template<
typename T>
147 static constexpr
bool test(decltype(declval<A>().extend()) * ptr) {
148 return is_same<decltype(ptr),size_t *>::value;
152 static constexpr
bool test(...) {
156 static const bool value = test<T>(
nullptr);
169 static const bool value =
template struct traits::is_random_access_char_sequence<T> exports a static const boolean member value...
template struct traits::has_size_index_operator<T> exports a static const boolean member value that i...
template struct traits::has_data_method<T> exports a static const boolean member value that is true i...
template struct traits::has_size_method<T> exports a static const boolean member value that is true i...
template struct traits::has_extend_method<T> exports a static const boolean member value that is true...
template struct traits::has_value_type_of<T,V> exports a static const boolean member value that is tr...