Apple Clang: не могу скомпилировать звонок на std :: rese для вектора с пользовательским распределениемC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Apple Clang: не могу скомпилировать звонок на std :: rese для вектора с пользовательским распределением

Сообщение Anonymous »

У меня есть следующий фрагмент кода: < /p>

Код: Выделить всё

#include 
#include 
#include 

// Example allocator, doesn't do anything but implements std::allocator_traits
template
struct null_allocator {
using value_type = T;
using size_type = std::size_t;
using pointer = T *;
using const_pointer = const pointer;
//using difference_type = typename std::pointer_traits
::difference_type;
using reference = T &;
using const_reference = const T &;

null_allocator() {}

template
null_allocator(const null_allocator&) {}

T* allocate(std::size_t size) {
(void) size;
return nullptr;
}

void deallocate(T* ptr, std::size_t size) {
(void) ptr;
(void) size;
}

template
struct rebind
{
typedef null_allocator other;
};
};

int main(int argc, char** argv) {
std::vector vec;

void * args;
vec.push_back(args);
vec.erase(vec.begin());
}
< /code>
gcc.godbolt.org показывает, что он компилизируется с Clang < /p>
Я передаю пользовательский распределитель на std :: вектор, нажмите на один объект на вектор и пытаюсь вызвать Std :: Erase на этот вектор. Пользовательский распределитель - это нулевый распределитель, который ничего не делает и не имеет значения. Дело в том, что этот фрагмент складывает в Linux как с GCC, так и с Clang, но не может компилировать на OSX с Xcode/Apple Clang. std :: iterator_traits: < /p>
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:604:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1120:54: error: no type named 'iterator_category' in
'std::__1::iterator_traits'
typedef typename iterator_traits::iterator_category iterator_category;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
bug.cpp:42:13: note: in instantiation of template class 'std::__1::__wrap_iter' requested here
vec.erase(vec.begin());
^
In file included from bug.cpp:1:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:604:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1121:54: error: no type named 'value_type' in
'std::__1::iterator_traits'
typedef typename iterator_traits::value_type        value_type;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1122:54: error: no type named 'difference_type' in
'std::__1::iterator_traits'
typedef typename iterator_traits::difference_type   difference_type;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1123:54: error: no type named 'pointer' in
'std::__1::iterator_traits'
typedef typename iterator_traits::pointer           pointer;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1124:54: error: no type named 'reference' in
'std::__1::iterator_traits'
typedef typename iterator_traits::reference         reference;
Кто -нибудь знает хороший обходной путь для этой проблемы?


Подробнее здесь: https://stackoverflow.com/questions/334 ... -allocator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»