Upper_bound: '~__nat' здесь явно помечен как удаленный [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Upper_bound: '~__nat' здесь явно помечен как удаленный [дубликат]

Сообщение Anonymous »

Насколько мне известно, можно использовать Upper_bound с разными типами, если у вас есть подходящий компаратор. Однако это не удается:
#include

struct MyData
{
int a{-1};

static struct
{
bool operator() (const MyData &left, const int &right) const
{
return left.a < right;
}
} CompareA;
};

void do_stuff()
{
std::deque myDeque
{
MyData{.a = 1},
MyData{.a = 2},
MyData{.a = 3},
MyData{.a = 4},
};

auto lower = std::lower_bound(myDeque.begin(), myDeque.end(), 2, MyData::CompareA);
auto upper = std::upper_bound(myDeque.begin(), myDeque.end(), 3, MyData::CompareA);
}

lower_bound компилируется нормально, но Upper_bound не работает в Xcode (clang) с:
struct __nat {
#ifndef _LIBCPP_CXX03_LANG
__nat() = delete;
__nat(const __nat&) = delete;
__nat& operator=(const __nat&) = delete;
~__nat() = delete; '~__nat' has been explicitly marked deleted here
#endif
};

Я предполагаю, что это какая-то всеобъемлющая ошибка? Кажется, нет никакого способа распутать то, что на самом деле сломалось. Единственное различие в самих шаблонных функциях, которое я вижу, заключается в том, что Upper_bound использует семантику перемещения, тогда как Lower_bound этого не делает:
return std::__lower_bound(__first, __last, __value, __comp, __proj);

по сравнению с
return std::__upper_bound(
std::move(__first), std::move(__last), __value, std::move(__comp), std::__identity());


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

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

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

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

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

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