Size: a a a

2020 March 09

AT

Anatoly Tomilov in pro.cxx
мда. Если end() — это past the end, то всегда begin() == end(), что может, наверное сломать что-то) (например, реализацию bool empty() const { return begin() == end(); })
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Anatoly Tomilov
мда. Если end() — это past the end, то всегда begin() == end(), что может, наверное сломать что-то) (например, реализацию bool empty() const { return begin() == end(); })
Например range-based for
источник

AT

Anatoly Tomilov in pro.cxx
Artöm Bakri Al-Sarmini
Например range-based for
тогда каноническая реализация/эквивалентный код должен быть такой:
{
 init-statement
 auto && __range = range_expression ;
 auto __begin = begin_expr ;
 auto __end = end_expr ;
 if (!empty(__range)) {
   do {
     range_declaration = *__begin;
     loop_statement
   } while (++__begin != __end);
 }
}
источник

AT

Anatoly Tomilov in pro.cxx
а empty как size(__range) == 0
источник

m

magras in pro.cxx
Anatoly Tomilov
а empty как size(__range) == 0
size() может быть линейным.
источник

AT

Anatoly Tomilov in pro.cxx
итераторы этого адаптера должны иметь разные реализации для контейнеров, у которых RandomAcessIterator, и для контейнеров, у которых более ограниченные
источник

DS

Dmitry Sokolov in pro.cxx
Не понимаю всё таки, в чем проблема использовать итератор с индексом и взятием по модулю в разыменовывании. Да, разыменовывание begin end даст одинаковое значение но при этом сами begin end не будут равны. Можно хоть пять раз так по кольцу пробежать.
источник

AT

Anatoly Tomilov in pro.cxx
Dmitry Sokolov
Не понимаю всё таки, в чем проблема использовать итератор с индексом и взятием по модулю в разыменовывании. Да, разыменовывание begin end даст одинаковое значение но при этом сами begin end не будут равны. Можно хоть пять раз так по кольцу пробежать.
Есть требование strict total ordering. Оно нарушится
источник

DS

Dmitry Sokolov in pro.cxx
Anatoly Tomilov
Есть требование strict total ordering. Оно нарушится
По знаку разницы можно упорядочить, достаточно чтобы размер контейнера не превышал половину max<size_type>.
источник

AT

Anatoly Tomilov in pro.cxx
Dmitry Sokolov
По знаку разницы можно упорядочить, достаточно чтобы размер контейнера не превышал половину max<size_type>.
а что делать с operator ==
источник

DS

Dmitry Sokolov in pro.cxx
Anatoly Tomilov
а что делать с operator ==
Ну для индексов == это просто сравнение чисел. Что с ним надо делать? Вроде ничего.
источник

DS

Dmitry Sokolov in pro.cxx
Для массива из 5 элементов можно итерировать с 0 по 5 или со 2 по 7.
источник

а

акварель на мету in pro.cxx
как можно в макросах сделать чтобы они раскладывались на несколько строк в зависимости от параметров ?
типа чтобы
spread(func, 1, 2, 3) 
трансформировалось в
func(1);
func(2);
func(3);
источник

S

Stas in pro.cxx
акварель на мету
как можно в макросах сделать чтобы они раскладывались на несколько строк в зависимости от параметров ?
типа чтобы
spread(func, 1, 2, 3) 
трансформировалось в
func(1);
func(2);
func(3);
Можно на variadic templates
источник

а

акварель на мету in pro.cxx
Stas
Можно на variadic templates
как именно?
гуглил но там вроде такого нету
источник

TS

Till Schneider in pro.cxx
акварель на мету
как именно?
гуглил но там вроде такого нету
Fold Expression
источник

а

акварель на мету in pro.cxx
Till Schneider
Fold Expression
так мне не функцию нужно а другой макрос вызвать
источник

A

Alex in pro.cxx
Как написать out of line definition для шаблонного метода-члена специализации шаблона класса? Пробую так - пишет extraneous template parameter list, но я не понимаю, почему бы он был лишним. Думаю, что ещё где-то ошибся и с точки зрения компилятора написал вообще не то, что планировал:
template <typename T>
class StorageIO {};

template <>
class StorageIO<QIODevice>
{
template <typename T, auto id>
bool write();
}

template <>
template <typename T, auto id>
bool StorageIO<QIODevice>::writе()
{
  return true;
}
источник

DS

Dmitry Sokolov in pro.cxx
Alex
Как написать out of line definition для шаблонного метода-члена специализации шаблона класса? Пробую так - пишет extraneous template parameter list, но я не понимаю, почему бы он был лишним. Думаю, что ещё где-то ошибся и с точки зрения компилятора написал вообще не то, что планировал:
template <typename T>
class StorageIO {};

template <>
class StorageIO<QIODevice>
{
template <typename T, auto id>
bool write();
}

template <>
template <typename T, auto id>
bool StorageIO<QIODevice>::writе()
{
  return true;
}
Может write<T, id>()?
источник

A

Alex in pro.cxx
да, конечно, это я при копи-пасте в телеграм потерял
источник