классов? Догадываюсь что ub, но интересна хотя бы примерная логика кодогенерации
#include <memory>
#include <string>
class Base
{
std::string x;
public:
virtual void method() = 0;
};
class Derived : public Base
{
public:
void method() {};
};
int main(int argc, char* argv[])
{
std::unique_ptr<Base> up(new Derived);
return 0;
}
Вот примерно такая штука у нас вполне жила на gcc, но при переезде на макосевый кланг начала падать с illegal instruction 4
Мне просто казалось тут слайсинг/утечки должны быть, а не некорректный машинный код 🤔
Что такое b? Хочу асм посмотреть
И это уб, да http://eel.is/c++draft/expr.delete#3
Там УБ в стандарте прописано, разумеется, требование к компилятору в этом случае наложит существенные (и бесполезные) ограничения на характер компиляции деструкторов
Лол
А Derived точно с тем же sizeof?
Как у вас такое вобще прошло, поставь [clang-diagnostic-delete-abstract-non-virtual-dtor]
К тому что вызовется деструктор предка, а не последнего потомка
Да, UB - это не обязательно "не работает".
Ну кстати тут же нет UB вроде...
А тут пока я UB не вижу.
А, нет, я неправ. Тут тоже UB, потому что ты явно указал класс , хранимый для Unique.
Обсуждают сегодня