Size: a a a

2020 April 27

AD

Andrey Davydov in pro.cxx
move constructor std::map в MSVC STL может кидать исключение, поэтому vector::resize пытается звать copy constructor, что приводит к ошибке компиляции (аналогичный случай недавно разбирали в этом чате).
Все компиляторы правы.
источник

A

Alex in pro.cxx
Ilia Zviagin
Преобразуй int в double и сравнивай
это не работает, потому что static_cast даёт double c ближайшим значением, а не с таким же битовым паттерном, как у uint64. А reinterpret_cast, насколько я помню, между примитивными типами тоже не работает.
источник

IZ

Ilia Zviagin in pro.cxx
Alex
это не работает, потому что static_cast даёт double c ближайшим значением, а не с таким же битовым паттерном, как у uint64. А reinterpret_cast, насколько я помню, между примитивными типами тоже не работает.
Не, ты не понял, это работает.

ЭТО ТАК И РАБОТАЕТ!
источник

DF

Dollar Føølish in pro.cxx
Реинтерпрет не работает? С какого?
источник

DF

Dollar Føølish in pro.cxx
Он же как раз и нужен для таких случаев
источник

ЮП

Юрий Першин in pro.cxx
Andrey Davydov
move constructor std::map в MSVC STL может кидать исключение, поэтому vector::resize пытается звать copy constructor, что приводит к ошибке компиляции (аналогичный случай недавно разбирали в этом чате).
Все компиляторы правы.
а почему тогда слегка модифицированный пример не кидает исключение?
https://godbolt.org/z/kqfyeP
источник

AD

Andrey Davydov in pro.cxx
Юрий Першин
а почему тогда слегка модифицированный пример не кидает исключение?
https://godbolt.org/z/kqfyeP
потому что вы запускаете его не под MSVC?
источник

ЮП

Юрий Першин in pro.cxx
Andrey Davydov
потому что вы запускаете его не под MSVC?
Microsoft Visual Studio Community 2019 Версия 16.3.2 VisualStudio.16.Release/16.3.2+29326.143
источник

A

Alex in pro.cxx
Dollar Føølish
Он же как раз и нужен для таких случаев
А вот и нет, он для указателей (и, возможно, ссылок, не помню)
https://godbolt.org/z/H8fbm5
источник

A

Alex in pro.cxx
то есть он-то для таких случаев нужен, но не работает
источник

AD

Andrey Davydov in pro.cxx
Юрий Першин
Microsoft Visual Studio Community 2019 Версия 16.3.2 VisualStudio.16.Release/16.3.2+29326.143
А вот так исключение будет https://godbolt.org/z/xacu7B
В вашем примере действительно не случается resize в runtime, но компилировать-то его надо.
источник

ЮП

Юрий Першин in pro.cxx
Andrey Davydov
А вот так исключение будет https://godbolt.org/z/xacu7B
В вашем примере действительно не случается resize в runtime, но компилировать-то его надо.
Все верно, Вы правы )
источник

АК

Александр Караев in pro.cxx
Очередной вопрос из серии "а кто прав?" - https://godbolt.org/z/PBUqJy

Суть: есть некий библиотечный некопируемый класс A, которому по некоторым причинам на мув-конструктор не навесили noexcept. Также есть пользовательский класс B, который хранит экземпляр класса A как поле. Пользователь уверен, что A(A&&) никогда не бросит исключение и объявляет B(B&&) noexcept = default;, а затем хочет сложить объекты класса B в вектор.

Итог:
gcc не компилирует с ассертом result type must be constructible from value type of input range
clang радостно проглатывает.

Вопросы: кто прав? как заставить компилятор сгенерировать B(B&&) noexcept = default; действительно  noexcept, не переписывая его тело вручную (что решает проблему)?
источник

DF

Dollar Føølish in pro.cxx
Ого интересный вопрос
источник

v

vehlwn in pro.cxx
Александр Караев
Очередной вопрос из серии "а кто прав?" - https://godbolt.org/z/PBUqJy

Суть: есть некий библиотечный некопируемый класс A, которому по некоторым причинам на мув-конструктор не навесили noexcept. Также есть пользовательский класс B, который хранит экземпляр класса A как поле. Пользователь уверен, что A(A&&) никогда не бросит исключение и объявляет B(B&&) noexcept = default;, а затем хочет сложить объекты класса B в вектор.

Итог:
gcc не компилирует с ассертом result type must be constructible from value type of input range
clang радостно проглатывает.

Вопросы: кто прав? как заставить компилятор сгенерировать B(B&&) noexcept = default; действительно  noexcept, не переписывая его тело вручную (что решает проблему)?
>на мув-конструктор не навесили noexcept
Это ошибка в классе. Как тогда вектору удовлетворить стронг ексепшен гаранти?
источник

АК

Александр Караев in pro.cxx
vehlwn
>на мув-конструктор не навесили noexcept
Это ошибка в классе. Как тогда вектору удовлетворить стронг ексепшен гаранти?
Я как пользователь библиотеки гарантирую, что A(A&&) ничего не бросит, потому и объявляю B(B&&) как noexcept
источник

EP

Egor Pugin in pro.cxx
Александр Караев
Я как пользователь библиотеки гарантирую, что A(A&&) ничего не бросит, потому и объявляю B(B&&) как noexcept
надо подтвердить это ручным ктором)
источник

v

vehlwn in pro.cxx
Почему у меня на годболте по умолчанию включается огромный шрифт в окне с ошибками?
источник

v

vehlwn in pro.cxx
Потому что у меня монитор маленькой?
источник

v

vehlwn in pro.cxx
Александр Караев
Я как пользователь библиотеки гарантирую, что A(A&&) ничего не бросит, потому и объявляю B(B&&) как noexcept
Это неформально. На заборе тоже написано.
источник