C ++ 11 рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рд╡реЗ C ++ 11 рдХреА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдмрд╛рддреЗрдВ рдХрд░рддреЗ рд╣реИрдВ: рдСрдЯреЛ, рд▓реИрдореНрдмреНрдбрд╛, рд╡реЗрд░реИрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рд╣рдордиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬреЛ рднрд╛рд╖рд╛ рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рдирдХ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ (рдлреЗрдВрдХрдиреЗ) рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВ (std :: uncaught_exception), рдПрдХ рд░реЛрдХ рддрдВрддреНрд░ рдпрджрд┐ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдПрд╕рдЯреАрдбреА :: рдЕрдкрд╡рд╛рдж рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдирдХ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рднреА рд╣реИред

рдирдпрд╛ рдорд╛рдирдХ рдЗрди рдЪреАрдЬреЛрдВ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЗрдХрд╛рдЗрдпрд╛рдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, C ++ рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



exception_ptr

рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЪреАрдЬ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ std :: рдЕрдкрд╡рд╛рдж_ptrред рдпрд╣ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдорд╛рдирдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЯрдВрдХрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ std :: shared_ptr рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдкрд╡рд╛рдж рд╕реНрд╡рдпрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рдж рднреЗрдЬрдирд╛ рд╣реИ; рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛ рджреЗрддреА рд╣реИрдВ:
struct some_exception { explicit some_exception(int x): v(x) { std::cout << " int ctor" << std::endl; } some_exception(const some_exception & e): v(ev) { std::cout << " copy ctor" << std::endl; } int v; }; std::exception_ptr throwExceptionAndCaptureExceptionPtr() { std::exception_ptr currentException; try { const int throwValue = 10; std::cout << "throwing " << throwValue << "..." << std::endl; throw some_exception(throwValue); } catch (...) { currentException = std::current_exception(); } return currentException; } void rethrowException(std::exception_ptr ePtr) { try { if (ePtr) { std::rethrow_exception(ePtr); } } catch (const some_exception & e) { std::cout << "catched int value: " << ev << std::endl; } std::exception_ptr anotherExceptionPtr = ePtr; try { if (anotherExceptionPtr) { std::rethrow_exception(anotherExceptionPtr); } } catch (const some_exception & e) { std::cout << "catched int value: " << ev << std::endl; } } void checkMakeExceptionPtr() { std::exception_ptr currentException = std::make_exception_ptr(some_exception(20)); std::cout << "exception_ptr constructed" << std::endl; rethrowException(currentException); } void exceptionPtrSample() { rethrowException(throwExceptionAndCaptureExceptionPtr()); checkMakeExceptionPtr(); } 

рдпрджрд┐ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдкрд╡рд╛рдж PtrSample рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдХреБрдЫ рджреЗрдЦреЗрдВрдЧреЗ:
10 рдлреЗрдВрдХ рд░рд╣реЗ рд╣реИрдВ ...
int ctor
рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рдЕрдВрддрд░ рдорд╛рди: 10
рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рдЕрдВрддрд░ рдорд╛рди: 10
int ctor
рдирдХрд▓ рдХрд░рдиреЗрд╡рд╛рд▓рд╛
рдирдХрд▓ рдХрд░рдиреЗрд╡рд╛рд▓рд╛
рдЕрдкрд╡рд╛рдж_рдкрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдкрдХрдбрд╝реЗ рдЧрдП рдЗрдВрдЯ рд╡реИрд▓реНрдпреВ: 20
рдкрдХрдбрд╝реЗ рдЧрдП рдЗрдВрдЯ рд╡реИрд▓реНрдпреВ: 20

рдЕрдкрд╡рд╛рдж_рдкрдЯ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИрдВ:


рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдХреЗ рдмреАрдЪ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рдж_ptr рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдереНрд░реЗрдб рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдХреИрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 void worker(std::promise<void> & p) { try { throw std::runtime_error("exception from thread"); } catch (...) { p.set_exception(std::current_exception()); } } void checkThreadAndException() { std::promise<void> p; auto result = p.get_future(); std::thread t(worker, ref(p)); t.detach(); try { result.get(); } catch (const std::runtime_error & e) { std::cout << "runtime error catched from async worker" << std::endl; } } 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, C ++ 11 рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рд╖рдп рд╣реИ, рдЗрд╕рдХреА рдЕрдкрдиреА рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ, рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЕрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВрдЧреЗред рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рд╡рд╛рджрд╛ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдПрдЯреЛрдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдереНрд░реЗрдб рд╕реЗ рджреВрд╕рд░реЗ (рдпрд╛ рдЕрдкрд╡рд╛рдж) рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдмрд╕ set_exception рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд╡рд╛рдж_ptr рд▓реЗрддрд╛ рд╣реИред рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ - рдпрд╣ рд╣рдорд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдзрд╛рд░рд╛ рдкрд░ рдбрд┐рдЯреИрдЪ рдпрд╛ рдЬреНрд╡рд╛рдЗрди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреА рдХреЛ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдВрдЪ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреЙрдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп () == рдЧрд▓рдд, рдЕрдиреНрдпрдерд╛ рдПрд╕рдЯреА :: рдЯрд░реНрдорд┐рдиреЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ "рдереНрд░реЗрдбреНрд╕ рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддрд╛ рд╣реИ", рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЙрдирдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ)

рдЕрд▓рдЧ рд╕реЗ, рдпрд╣ gcc-4.7 рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ (рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реБрдП), рдЗрд╕реЗ Google, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ std :: рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -pthread рдЭрдВрдбреЗ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ CMake рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ (рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣рд╛рдВ рдЬрдЯрд┐рд▓рддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, -рдереНрд░реЗрдб рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдкрд╛рд░реНрдХ рд╕реЛрд▓рд╛рд░рд┐рд╕ рдкрд░ -preadread рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) - рдПрдХ рд╡рд┐рд╢реЗрд╖ рдереНрд░реЗрдбреНрд╕ CMake рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛрддреА рд╣реИ :
find_package (рдЖрд╡рд╢реНрдпрдХ рд╕реВрддреНрд░)
# ...
рд▓рдХреНрд╖реНрдп_рд▓рд┐рдВрдХ_ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (cxx_exception $ {CMAKE_THREAD_LIBS_INIT})


рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рдж рд╣реИрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдпрд╣ рддрдВрддреНрд░ рдЖрдкрдХреЛ рдЕрдиреНрдп рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ "рд╕рдВрд▓рдЧреНрди" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЬреЛ рдкрд╣рд▓реЗ рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛) рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЛред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдЕрдкрдиреА рдкрджрд╛рдиреБрдХреНрд░рдо рд╣реИ, рддреЛ рд╣рдо рд╕рднреА "рддреГрддреАрдп-рдкрдХреНрд╖" рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдорд╛рд░реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдЙрдирд╕реЗ "рдЬреБрдбрд╝реА" рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг cppreference.com рдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореЗрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдУрд╡рд░рд▓реИрдк рдХрд░рддрд╛ рд╣реИ:
 struct third_party_exception { explicit third_party_exception(int e) : code(e) { } int code; }; void third_party_worker() { throw third_party_exception(100); } class our_exception : public std::runtime_error { public: our_exception(const std::string & e) : std::runtime_error("our error: " + e) { } }; void ourWorker() { try { third_party_worker(); } catch (...) { throw_with_nested(our_exception("worker failed")); } } void exceptionHandler(const our_exception & e, bool catchNested) { std::cerr << "our exception catched: " << e.what(); if (catchNested) { try { rethrow_if_nested(e); } catch (const third_party_exception & e) { std::cerr << ", low level reason is: " << e.code; } } std::cerr << std::endl; } void exceptionProcessing() { try { ourWorker(); } catch (const our_exception & e) { exceptionHandler(e, false); } try { ourWorker(); } catch (const our_exception & e) { exceptionHandler(e, true); } } 


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдлрдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ "рдерд░реНрдб-рдкрд╛рд░реНрдЯреА" рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣рдорд╛рд░рд╛ "рдЕрдкрд╡рд╛рдж" рдмрдирд╛рддрд╛ рд╣реИ: рдерд░реНрдб_рдкрд╛рд░реНрдЯреА_рд╡рд░реНрдХрд░ рдФрд░ рд╣рдорд╛рд░рд╛ рд╡рд░реНрдХрд░ рдХреНрд░рдорд╢рдГ "рдерд░реНрдб-рдкрд╛рд░реНрдЯреА" рдлрдВрдХреНрд╢рди рдФрд░ "рд╣рдорд╛рд░реЗ" рдлрдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ (рд╣рдорд╛рд░реЗ_рдПрдХреНрд╕реИрд╕реЗрдкреНрд╢рди) рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХреБрдЫ (рд╣рдо, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) "рдерд░реНрдб-рдкрд╛рд░реНрдЯреА" рдЕрдкрд╡рд╛рдж рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рд╣рдореЗрдВ "рдирд┐рдЪрд▓реЗ" рд╕реНрддрд░ рдкрд░ рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╣рдореЗрд╢рд╛ rethrow_if_edested рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдХ (рдиреЗрд╕реНрдЯреЗрдб) тАЛтАЛрдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕ рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди "рд╣рдорд╛рд░реЗ" рдЕрдкрд╡рд╛рдж рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрд╡рдЬ рдЬреЛ рдХрд┐рд╕реА рддреГрддреАрдп-рдкрдХреНрд╖ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЙрддреНрдкрд╛рджрди рдпрд╛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдХреИрдЪ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдХреЗ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (рдпрд╛ рд░рд┐рд▓реАрдЬрд╝, рдбреАрдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рд╕реЗред

рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд░реНрдЧ рдФрд░ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ:

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рдж рддрдВрддреНрд░ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпреЛрдВ current_exception рдФрд░ rethrow_exception рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╛рди gcc рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, nested_exception рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж type_ptr рдХрд╛ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ current_exception рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ rethrow_nested рдкрджреНрдзрддрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ rethrow -exception рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

Noexcept рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди

рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд (рдФрд░ рдЕрдм рдЕрдкреНрд░рдЪрд▓рд┐рдд) рдлреЗрдВрдХ () рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЧрд╛рд░рдВрдЯреА рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ std :: рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

рдпрд╣ рддрдВрддреНрд░ рдкреБрд░рд╛рдиреЗ рдлреЗрдВрдХ рдХреЗ рд╕рдорд╛рди рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ()
 void func() noexcept { //... } 


рдФрд░ рдПрдХ рдирдП рд░реВрдк рдореЗрдВ:
 void func() noexcept(boolean_expression_known_at_compile_time) { //... } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕рдЪ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ noexcept рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛, рдРрд╕реА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рдиреЙрдЗрд╕реЗрд╕реЗрдкреНрдЯ (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рдСрдкрд░реЗрдЯрд░ рднреА рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдордп рдкрд░ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдЫреЛрдбрд╝рддреА рд╣реИ, рддреЛ рдпрд╣ рдСрдкрд░реЗрдЯрд░ рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
 void noexceptSample() { cout << "noexcept int(): " << noexcept(int()) << endl; cout << "noexcept vector<int>(): " << noexcept(vector<int>()) << endl; } 

Gcc-4.7.2 рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб:
noexcept int (): 1
noexcept рд╡реЗрдХреНрдЯрд░ <int> (): 0


рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИ (noexcept рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ)ред
рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, noexcept рдпрд╛ рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 template <typename InputTypeT> void func() noexcept(noexcept(InputTypeT())) { InputTypeT var; /// do smth with var std::cout << "func called, object size: " << sizeof(var) << std::endl; } void noexceptSample() { std::cout << "noexcept int(): " << noexcept(int()) << std::endl; std::cout << "noexcept vector<int>(): " << noexcept(std::vector<int>()) << std::endl << std::endl; /// @note function is not actually called std::cout << "noexcept func<int>: " << noexcept(func<int>()) << std::endl; std::cout << "noexcept func<vector<int>>: " << noexcept(func<std::vector<int>>()) << std::endl; } 

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ:
noexcept int (): 1
noexcept рд╡реЗрдХреНрдЯрд░ <int> (): 0

noexcept func <int>: 1
noexcept func <рд╡реЗрдХреНрдЯрд░ <int >>: 0


рд╕рд╛рд░рд╛рдВрд╢

C ++ 11 рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд▓рд╛рдпрд╛ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдВ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдкрд╡рд╛рдж_ptr рд╣реИ рдФрд░ рдирд┐рдпрдорд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдордирдорд╛рдирд╛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдереНрд░реЗрдб рдХреЗ рдмреАрдЪ рдЕрдкрд╡рд╛рдж рдЫреЛрдбрд╝ рджреЗрдВ)ред рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдмреНрд░рд╛рдВрдбреА рдЯреНрд░рд╛рдИ рд▓рд┐рдЦрдирд╛ рдерд╛ ... рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдерд╛, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЯреНрд░рд╛рдИ ... рдХреИрдЪ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддреА рд╣реИред

рдиреЗрд╕реНрдЯреЗрдб рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рднреА рд╕рдВрднрд╡ рдерд╛, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдмреВрд╕реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдмрдврд╝рд╛рд╡рд╛ :: рдЕрдкрд╡рд╛рдж рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдирд╛ рдбреЗрдЯрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдХреЛрдб, рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢, рдЖрджрд┐), рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ - рдЕрдкрд╡рд╛рдж рдХреЗ рдЕрдВрджрд░ рдордзреНрдпрд╕реНрдерддрд╛ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдирд╛ред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХреЗрдВрдЧреЗ , рдиреЛрдПрдХреНрд╕рд╕реЗрдкреНрдЯ рд╣реИ , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЗ рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рднреА рдЙрджрд╛рд╣рд░рдг github рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ

рдЕрджреНрдпрддрди 1. рдиреЗрдорд╕реНрдкреЗрд╕ std рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛, рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд╕рдВрд╕реНрдерд╛рдПрдБ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдХреМрди рд╕реА рдирд╣реАрдВред

Source: https://habr.com/ru/post/In160955/


All Articles