Александр
6-й шланг уже заимплементил spaceship operator?!
Egor
да вроде
Egor
в 7*
Александр
cppref считает иначе
Alexander "SonnySlave"
пусть он пилит что хочет. пока что conan выглядит наиболее живым (на пару с vcpkg)
Egor
а как же мой cppan?
Alexander "SonnySlave"
ИМХО, не так популярен уже как Conan
Alexander "SonnySlave"
если мы начнём перечислять все пакетные менеджеры под кресты, то это будет долго)
Крылатый
apt же
Alexander "SonnySlave"
плохой наброс
Крылатый
Сорь(
Egor
вцпкг пока только виндовый
Alexander "SonnySlave"
Alexander "SonnySlave"
уже вроде как пашет в тестовом режиме на линуксе
Alexander "SonnySlave"
@crackedmind
Igor
пока что
кто-то ж вбрасывал что оно научилось в кроссплатформу?
Igor
или это не здесь а в слаке было...
Alexander "SonnySlave"
кто-то ж вбрасывал что оно научилось в кроссплатформу?
так оно на линуксе пока что в тестовом работает
Alexander "SonnySlave"
пока что релиза не было под линухи
Igor
ах, значит перепутал
Berkus
кстати, на статусной странице пишут что еще нету Consistent comparison (operator<=>) P0515R3 No
Andrei
Объясните, плиз, такую вещь. Почему шаблонные функции, которые находятся в хедере, при включении в разные .cpp, где происходит одинаковое инстанцирование шаблонной функции, не вызывает ошибку линковщика? Хотя шаблоны же по умолчанию не inline. Хотя при специализации вызывает ошибку. Как это работает у компилятора?
pavel
Очередной супертупой вопрос. Фигли вот это не компилируется int x[5] = {1,2,3,4,5}; auto v = reinterpret_cast<int[3]> ( &x[2] );
Andrei
указатель к массиву привести нельзя. можно массив к указателю
Kirill
Объясните, плиз, такую вещь. Почему шаблонные функции, которые находятся в хедере, при включении в разные .cpp, где происходит одинаковое инстанцирование шаблонной функции, не вызывает ошибку линковщика? Хотя шаблоны же по умолчанию не inline. Хотя при специализации вызывает ошибку. Как это работает у компилятора?
odr не проверяется для не полностью специализированных шаблонов. Если нет полной специализации, считай там есть инлайн. если сделал полную специализацию, нужно писать инлайн. Я могу быть не прав, поправьте если что
pavel
указатель к массиву привести нельзя. можно массив к указателю
А что этому мешает чисто физически? x суть указатель на какой-то кусок памяти.
Andrei
А что этому мешает чисто физически? x суть указатель на какой-то кусок памяти.
В языке, обычно ничанющим это неизвестно, есть тип массив. И вот массив - это не указатель на массив. Просто имя массиво неявно кастуется к указателю.
Anatoliy
функция не может вернуть массив, только указатель или ссылку на него
Кирилл
кстати, на статусной странице пишут что еще нету Consistent comparison (operator<=>) P0515R3 No
http://en.cppreference.com/w/cpp/language/default_comparisons Вот такого действительно ещё нет. Без default и без использования операторов сравнения собирает, но не более того
Anatoliy
Может. Если завернуть его в структуру
я в курсе, но это уже структура
Anatoliy
я тя умоляю)
ну опровергни, чё
pavel
int x[5] = {1,2,3,4,5}; auto v = reinterpret_cast<int (&) [3]> ( x[2] );
Вариант - гуд! Но не компилиццо далее: int x[5] = {1,2,3,4,5}; auto v = reinterpret_cast<int (&) [3]> ( x[2] ); for ( auto item : v ) { std::cout « item « ", "; } Подменяем в цикле v на x- всё ништяк Фигли для x оно где-то нашло begin + end, а для ссылки не нашло.
Anatoliy
абсурдный вопрос. Это невалидный код
Anatoly
А что этому мешает чисто физически? x суть указатель на какой-то кусок памяти.
раз ты говоришь указатель, тогда сделай что-нибудь с таким "указателем": int x[5] = {}; x += 1;
Anatoly
Я имею ввиду "физически", а не семантически.
еще лучше, массив - это поименованный участок памяти и никакой не указатель
pavel
еще лучше, массив - это поименованный участок памяти и никакой не указатель
Сделать это мешает семантика, но физика не мешает - физически это делается так: int *p = &x[0]; ++ p;
pavel
На основании этой физики мне непонятно почему бы не скастовать кусок x к v
pavel
нихрена не понял
Ну что такое int x[5]? Физически. Физически это непрерывный кусок памяти размером sizeof(int) * 5. Почему бы просто не смотреть на этот же кусок памяти со смещения sizeof(int) * 2 как на тип int [3]; под именем v? Непонятно что ФИЗИЧЕСКИ этому мешает. Т.е. почему я не могу создать некий int v[3] который смотрит на подкусок x.
pavel
Конечная цель - подкусок x засунуть в range-based loop, мать его.
Kirill
begin-end. end указатель не принадлежит диапазрону
Kirill
Что значит термин "полуоткрытый", карл?
Anatoliy
Вот int x[5] = {1,2,3,4,5}; int (&v)[3] = reinterpret_cast< int (&) [3] >(x[2]); for (int j : v) {}. Шах и мат.
Ivan
Чё за "один адрес"?
Ну, если следовать твоей логике касательно физического обоснования - получается что в одной точке единовременно находятся arr[5], arr[4], arr[3],arr[2], arr[1], если брать сечение от начала, а не от конца.
Ivan
Но это только предположение.
Anatoliy
есть правила для auto
Anatoliy
примерно те же что и для параметров функций, типа template< typename T > void f(T). Можешь посмотреть метафункцию std::decay_t - как она преобразует типы. Это происходит неявно.
Ivan
Одна точка - всмысле один адрес в памяти.
Anatoliy
int (&)[3] неявно преобразуется в просто int *
pavel
Одна точка - всмысле один адрес в памяти.
Ну если мы 2 разными указателями *vasya и *petya показываем на одну и ту же область в памяти, то почему-то никому не вредит тот факт, что vasya[0] и petya[0] показывают на одну и ту же эту самую "точку". И в моём случае непонятно кому это должно вредить. По крайней мере непонятно МНЕ, ясно что возможно я и дебилоидный тормозавт.
pavel
мне непонятно, почему вы так зациклились на C-подмножестве плюсов? зачем это в данном чате?
Да просто срач в курилке возник. Как без копирований сделать slice из массива вида int t[N] так, чтобы этот слайс успешно жрал for ( : )
Ignat
std::span?
pavel
std::span?
Не, не слышал)
Berkus
Не, не слышал)
тогда gsl::span
Andrey
Круто. А почему auto не взлетело?
Возможно должно быть auto&
Constantine
Вот int x[5] = {1,2,3,4,5}; int (&v)[3] = reinterpret_cast< int (&) [3] >(x[2]); for (int j : v) {}. Шах и мат.
Фига. Прямо хочу узнать, является ли это UB по стандарту)
Anatoliy
кто не знает как получить тип какого-то выражения выводимого (например тип v выше), то надо просто присвоить значение этого выражения чему-нибудь несовместимому, например struct {} _ = v;. В сообщении об ошибке присваивания можно прочесть тип правой части
Andrei
Ну да, в VS можно просто навести на выражение.
🐙 Antony
Ну да, в VS можно просто навести на выражение.
О_О Научите этому QtCreator. Я в долгу не останусь