1. C++ / Говнокод #24925

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    #include <new>
    
    template <typename Lhs, typename Rhs>
    auto replace(Lhs *lhs, Rhs) {
      return *new (reinterpret_cast<void*>(lhs)) Rhs{};
    }
    
    int main() {
      auto f1 = &add;
      auto f2 = replace(add, [](int a, int b) { return a - b; });
    
      f1(4, 2);
      f2(4, 2);
    }

    Компилируется, не падает при запуске.

    Запостил: Elvenfighter, 16 Октября 2018

    Комментарии (17) RSS

    • Сегодня уже лень разбираться. Вот, полигончик для охочих: https://wandbox.org/permlink/eOc54FYr7aGftgGH

      Ах да, вдохновение отсюда: http://govnokod.ru/24916#comment435346
      Ответить
      • Кстати, в старых gcc не конпеляется - у лямбды нет конструктора. Опять какую-то новую поебень в стандарт протащили?
        Ответить
        • шлангом оно кстати тоже не конпеляется, даже самым новым
          Ответить
          • Компилируется же: https://wandbox.org/permlink/8x7uxFXyJcXzLm84
            Ответить
            • Хмм... В каком месте драфта крестостандарта можно почитать о том, что такая хрень вообще допустима?
              Ответить
        • Ну в силу протекающих абстракций удалось установить:
          * У лямбды без захвата есть конструктор по умолчанию
          * У лямбды с захватом есть копирующий и move-constructor (а конструктор по умолчанию =delete)

          Припоминается тип говорил о протекающих абстракциях (SFW): https://www.youtube.com/watch?v=S9_mYmvO4Ow
          Ответить
    • Ах, ну да еще забыл (как всегда):
      int add(int a, int b) { return a + b; }
      Ответить
    • Теперь будь добр вот всю ту хуйню, которую ты высрал, перевести на "PHP".
      В качестве предупредительной меры въебал минус.
      Ответить
    • Пол Аллен умер:((
      Ответить
    • >Компилируется, не падает при запуске.
      Советский static_assert?
      Ответить

    Добавить комментарий