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

    +12

    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
    #include <stdio.h>
    #include <type_traits>
    #include <string>
    struct hack_t{};
    template<class TYPE>static hack_t operator&(const TYPE&,hack_t){return hack_t();}
    int main()
    {
      struct type{};
      std::string var="win";
      #define get_meta(var)[&]()->bool{hack_t unnamed;hack_t foo(var&unnamed);return std::is_function<decltype(foo)>::value;}()
      bool result_0=get_meta(var);
      bool result_1=get_meta(type);
      #undef get_meta
      printf("get_meta(var) == %s\n",result_0?"true":"false");
      printf("get_meta(type) == %s\n",result_1?"true":"false");
      return 0;
    }

    Код отличает переменную от типа.
    http://ideone.com/t7BBO4
    Сами знаете откуда.

    Запостил: LispGovno, 27 Ноября 2012

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

    • но согласись, какое задание, такое и решение
      Ответить
      • Интересно, для чего это можно применить.
        Ответить
        • свой sizeof(trololo) с учетом НДС и военного времени
          не знаю
          Ответить
          • Это не констнта этапа компиляции, поэтому область применение ещё более ограничена.
            Ответить
            • Перепиши так, чтобы стала константой.
              Есть одна идея, минут через 20 попробую реализовать ее.
              Ответить
    • Вот однажды наши потомки скажут: Ну что это такое? Как программесту не стыдно писать такой детский код? Мы уже настолько мощные штуки метапрограммируем на крестах, что то, что показано в этом топике в среднеотстающем детском саду дети лепят в игровой форме на интерактивных уроках труда. Минус.
      Ответить

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