Насколько мне известно, можно использовать 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
Upper_bound: '~__nat' здесь явно помечен как удаленный [дубликат] ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1737044864
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());
Подробнее здесь: [url]https://stackoverflow.com/questions/79362300/upper-bound-nat-has-been-explicitly-marked-deleted-here[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия