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

    0

    1. 1
    #define $(x) [&](void)->auto{try{return (x);}catch(...){return decltype(x){};}}()

    Собачка

    Запостил: kcalbCube, 09 Мая 2022

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

    • Это доллар.
      Ответить
    • Твой доллар глючный.

      https://ideone.com/vILTv5
      #include <stdio.h>
      
      #define $(x) [&](void)->auto{try{return (x);}catch(...){return decltype(x){};}}()
      
      int foo() {
          int a[1];
          return a[10005000];
      }
      
      int main() {
          $(printf("Hello, kcalb\n"));
          $(printf("%d\n", foo()));
          $(printf("Hello, kcalb\n"));
      }
      Ответить
      • что бы это решить понадобится слишком много платформозависимого оверхеда
        Ответить
      • > return a[10005000];
        У Вас UB. Никакими собачками это не лечится.
        Ответить
        • > собачками это не лечится.

          ПХПшник:
          https://www.meme-arsenal.com/memes/b4ae5fd4231fc7cbfd4456fe3d73f47a.jpg
          Ответить
    • Так же не работает $(cout << 42 << endl), проверь.
      Ответить
      • #include <type_traits>
        
        template<typename T>
            requires (!std::is_reference_v<std::invoke_result_t<T>>)
        auto $impl(const T& f) -> decltype(f())
        {
            try
            {
                return f();
            }
            catch(...)
            {
                return decltype(f())();
            }
        }
        template<typename T>
            requires std::is_reference_v<std::invoke_result_t<T>>
        void $impl(const T& f)
        {
            try
            {
                f();
            }
            catch(...){}
        }
        
        #define $(x) $impl([&](void) -> decltype(x) {return x;})
        
        int main(void)
        {
            auto a = [](void) -> int
            {
                throw 1;
                return 1;
            };
        
            $(std::cout << 1);
            return $(a());
        }


        работает проверяй
        Ответить

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