#ifndef ILYA_SHARED_HEADER_GENERIC_MACROS
#define ILYA_SHARED_HEADER_GENERIC_MACROS

/*
#define main(...) \
    main_inner(int argc, char** argv); \
    int main(int argc, char** argv) { \
        try {\
            return main_inner(argc, argv);\
        } catch(const std::exception& e) {\
            std::cerr << "\n\nUncaught exception: " << e.what() << "\n";\
            char *f=0; *f=1;\
        } catch(const std::string& e) {\
            std::cerr << "\n\nUncaught exception: " << e << "\n";\
            char *f=0; *f=1;\
        } catch(const char* e) {\
            std::cerr << "\n\nUncaught exception: " << e << "\n";\
            char *f=0; *f=1;\
        } catch(...) {\
            std::cerr << "\n\nUncaught exception.\n";\
            char *f=0; *f=1;\
        }\
    }\
    int main_inner(int argc, char** argv)

#ifndef NO_GENERIC_H_ASSERT
    #ifdef assert
        #undef assert
    #endif
    #define assert(v) if (!(v)) { std::cerr << "\n\nAssertion failed: " << __FILE__ << " : " << __LINE__ << "\n"; char* shared_generic_assert_char_123=nullptr; *shared_generic_assert_char_123=1; throw 0; } (void)0
#endif
*/

#endif
