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

    +3

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    template<class... Bases>
    struct MaminVisitor: public boost::static_visitor<>, public Bases... {
        MaminVisitor(Bases&&... bases) : Bases(std::move(bases))... { }
    };
    
    
    template<class Variant, class... F>
    void match(Variant &&v, F &&... functors) {
        typedef MaminVisitor<typename std::decay<F>::type...> visitor_t;
        boost::apply_visitor(visitor_t(std::move(functors)...), std::forward<Variant>(v));
    }
    
    
    int main() {
        boost::variant<int, double, std::string> v = "ololo";
    
        match(v,
            [&](auto x) {
                std::cout << "auto branch " << x << std::endl;
            },
            [&](double x) {
                std::cout << "double branch " << x << std::endl;
            }
        );
    
        return 0;
    }

    Сделал няшный матч, а на гцц не конпелируется.
    http://ideone.com/J9ulsr

    Запостил: kurwa-nextgen, 05 Июля 2016

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

    • отношение длины сообщения об ошибке к длине исходного кода превосходит... 300!
      Ответить
      • всего-то в 300?
        вроде, на гк проскакивала ссылка, повторю
        http://tgceec.tumblr.com/post/74534916370/results-of-the-grand-c-error-explosion
        Ответить
        • Это просто я phoenix туда не воткнул.
          Ответить
        • > всего-то в 300
          Да банальный оператор сдвига в поток, которому передали что-то левое, по-моему килобайт 20-30 высирает...
          Ответить
          • это не интересно - это все видели, когда компилер выдает список похожих перегруженых операторов.
            Ответить
        • > вроде, на гк проскакивала ссылка, повторю

          порадоволо.
          Ответить
      • я недавно на 20 строчках кода получил 33 к сообщений об ошибке.
        Ответить
        • spirit?
          Ответить
          • нет. Как раз регистрировал типы + stream операторы + операторы преобразования для QVariant. Там нет автоконвертации, например, из QVector<int> в QVector<double>
            Ответить
        • n лет назад после подобного я просто подумал "нахуй" и выучил haskell.
          Ответить
          • Хаскель тоже любит непонятные портянки выдавать, если типы экономишь... Ну покороче, конечно.
            Ответить
            • > покороче
              http://ideone.com/fzOpIv
              Ответить
              • Эк его распидорасило!
                Поясните анскиллябрам заедушным - отчего такой странный результат?
                Ответить
                • Шаблон порвался.
                  С помощью TemplateHaskell можно произвольный код в compile time выполнять.
                  Ответить
            • перл лучше. мне раз выдал 2-3 страницы ошибок. где-то в начале (или в конце?) стояло дежурное "missing semicolon in line <n>?" чудеса слабого синтакса. (но по крайней мере перл пытается хотя бы подсказку выдать.)
              Ответить
    • Лямды для лалок анскильных. Даёшь на phoenix!
      Ответить
    • > MaminVisitor

      очепятка очевидно, но не пойму что хотели написать. maiming the visitor? или просто motherfucker?
      Ответить
    • Вот оно че оказывается http://stackoverflow.com/questions/29661253/overloaded-lambdas-in-c-and-differences-between-clang-and-gcc
      Век живи - век учи с++.
      Работающий матч http://ideone.com/yEd2vD
      Ответить
      • и вот после такого еще спрашивают зачем нужен С, мойдодыры...
        Ответить

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