классов? Догадываюсь что 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.
Обсуждают сегодня