Size: a a a

2020 October 15

АР

Андрей Руссков... in pro.cxx
так this это же не на контрольный блок указатель )
источник

VK

Vyacheslav Klimentye... in pro.cxx
Danya
Ну тут надо открывать доки конкретной имплементации и смотреть
Очень похоже, что этот оверхед только у MSVC. В Clang и GCC он отсутствует. ABI Itanium он тоже нафиг не сдался.
https://stackoverflow.com/questions/51356882/overhead-of-placement-new
Ну и вот такое обсуждение в комитете аж с 2004 года: https://wg21.cmeerw.net/cwg/issue476
источник

M

Michael in pro.cxx
Переслано от Michael
Можно ли лямбды считать замыканиями, если они захватывают контекст по значению?

(идет в разрез утверждению на вики (нет захвата по ссылке), но тем не менее, такая лямбда может вполне автономно существовать вне ф-ции, где она создалась (и работать с её данными)  - это одно из условий)
источник

m

magras in pro.cxx
Vyacheslav Klimentyev
Очень похоже, что этот оверхед только у MSVC. В Clang и GCC он отсутствует. ABI Itanium он тоже нафиг не сдался.
https://stackoverflow.com/questions/51356882/overhead-of-placement-new
Ну и вот такое обсуждение в комитете аж с 2004 года: https://wg21.cmeerw.net/cwg/issue476
Не стоит путать placement new и обычный new. Откуда во втором случае компилятор узнает количество элементов во время вызова delete[]?
источник

DP

Denis Paukaev in pro.cxx
Александр Караев
template <class... Ts>
constexpr auto foo3(const Ts& ...ts) {
   const void* arg = nullptr;
   std::size_t(*visitor)(const void*) = nullptr;

   ((arg = &ts, visitor = [](const void* arg) { return F(*static_cast<const Ts*>(arg)); }, Predicate(ts)) || ...);

   return visitor(arg);
}


:)

Спасибо за идею.
это разве работает?)
источник

VK

Vyacheslav Klimentye... in pro.cxx
magras
Не стоит путать placement new и обычный new. Откуда во втором случае компилятор узнает количество элементов во время вызова delete[]?
Согласен, что необходимо где-то хранить их количество. Только тогда для placement new нужно было изменить поведение, поскольку за освобождение памяти отвечает уже разработчик. Сейчас placement new для массивов, получается, неприменим. А хотелось бы.
Ну и там всё-таки не количество хранится, иначе об этом говорилось бы.
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
это разве работает?)
да
источник

DP

Denis Paukaev in pro.cxx
мне почему-то упорно пишет

cast from 'const void *' is not allowed in a constant expression
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
мне почему-то упорно пишет

cast from 'const void *' is not allowed in a constant expression
на godbolt вроде static_assert нормально срабатывал, не помню.
локально я тестил без constexpr, правда
источник

DP

Denis Paukaev in pro.cxx
я на таком же примере проверил

static_assert(foo3(-1, -1.0f, 10, true) == sizeof(int));
источник

АК

Александр Караев... in pro.cxx
Denis Paukaev
мне почему-то упорно пишет

cast from 'const void *' is not allowed in a constant expression
https://godbolt.org/z/fhrbT3

заодно можно посмотреть кодген каждого варианта
источник

DP

Denis Paukaev in pro.cxx
Александр Караев
https://godbolt.org/z/fhrbT3

заодно можно посмотреть кодген каждого варианта
источник

АК

Александр Караев... in pro.cxx
любопытно..
интересно, кто прав - gcc или clang
источник
2020 October 16

A

Alex in pro.cxx
std::size обязан работать с constexpr const char*?
источник

АК

Александр Караев... in pro.cxx
Alex
std::size обязан работать с constexpr const char*?
Нет. Только с const char[N]
источник

A

Alex in pro.cxx
Эх... Спасибо. А как в компайл тайм узнать длину литерала? Я не могу его принять по char[N].
источник

АК

Александр Караев... in pro.cxx
Alex
Эх... Спасибо. А как в компайл тайм узнать длину литерала? Я не могу его принять по char[N].
Принимай string_view
источник

АР

Андрей Руссков... in pro.cxx
Циклом же? )
источник

АР

Андрей Руссков... in pro.cxx
ну или string_view, так меньше кода
источник

И

Игорь in pro.cxx
strlen не подойдёт? Можно разбить на слова с помощью strtok
источник