
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢
рд╕реА ++ 11 рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдХрд╛рд░рдг, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХрддрд╛ рдХреА рдХрдореА рд╕реЗ, рдмреВрд╕реНрдЯрд░ рдиреЗ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ C ++ 98 / C ++ 03 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдорд╛рдирдХ C ++ 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдорд╛рдирдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛
type_traits ,
thread ,
mutex ,
chrono ,
nullptr.h рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛
рдХрд┐ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреНрд╕ std :: nullptr_t рдФрд░
core.h рдЬрд╣рд╛рдВ рдореИрдХреНрд░реЛ рдХрдВрдкрд╛рдЗрд▓рд░-
рдирд┐рд░реНрднрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдмреЗрд╕рдмреНрд░реА рдФрд░ рдЧреИрд░-рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде GitHub рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
рдХрдорд┐рдЯ рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рдкрд░рд┐рдЪрдпрдЕрдзреНрдпрд╛рдп 1. рд╡реАрдЖрдИрдПрдо рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рдбреЗрдВрд╕рдЕрдзреНрдпрд╛рдп 2. #ifndef __CPP11_SUPPORT__ #define __COMPILER_SPECIFIC_BUILT_IN_AND_MACRO_HELL__ #endifрдЕрдзреНрдпрд╛рдп 3. рд╕рд╣реА nullptr рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдвреВрдБрдврдирд╛рдЕрдзреНрдпрд╛рдп 4. рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ....
рек.рез рд╣рдо рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ....
рек.реи рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рддрдиреА рдЪрдорддреНрдХрд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ....
рек.рей рдкреЙрдЗрдВрдЯрд░реНрд╕ рдФрд░ рдСрд▓-рдСрд▓-рдСрд▓....
4.4 рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдЕрдзреНрдпрд╛рдп 5
...
рдЕрдзреНрдпрд╛рдп 2. #ifndef __CPP11_SUPPORT__ #define __COMPILER_SPECIFIC_BUILT_IN_AND_MACRO_HELL__ #endif
рд╕рднреА рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдВрдШреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ "рдорд╛рдирдХ" рд╣реЗрдбрд░ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрд▓рдЧ
рдирд╛рдорд╕реНрдерд╛рди stdex рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
, рдореИрдВ
type_traits ,
nullptr.h рдФрд░ рдПрдХ рд╣реА
core.h рдХреЗ рд╕рд╛рде рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ
рдмрдврд╝рд╛ , рдЬрд┐рд╕рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдереЗ рдЬреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдорд╛рдирдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдереЗред
рджреЗрд╢реА nullptr ,
char16_t ,
char32_t рдФрд░
static_assert ред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╕реА ++ рдорд╛рдирдХ
(рдЦрдВрдб 14.8) рдХреЗ рдЕрдиреБрд╕рд╛рд░, __cplusplus рдореИрдХреНрд░реЛ рдХреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдорд░реНрдерд┐рдд рдорд╛рдирдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
C++ pre-C++98: #define __cplusplus 1 C++98: #define __cplusplus 199711L C++98 + TR1: #define __cplusplus 199711L
рддрджрдиреБрд╕рд╛рд░, рд╕рдорд░реНрдерди рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рддреБрдЪреНрдЫ рд╣реИ:
#if (__cplusplus >= 201103L)

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдм рдПрдХ рд░реЗрдХ рдХреЗ рд╕рд╛рде рджрд┐рд▓рдЪрд╕реНрдк рдмреИрд╕рд╛рдЦреА рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА, рдпрд╛ рдмрд▓реНрдХрд┐ рдХреЛрдИ рднреА рдирд╣реАрдВ, рд╕рдВрдХрд▓рдХ рдЕрдЧрд▓реЗ рдорд╛рдирдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдФрд░ рддреБрд░рдВрдд рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2013 рдореЗрдВ
рдХреЙрдиреНрд╕реНрдЯреИрдХреНрд╕ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрдкрд╕реНрдерд┐рдд
рдерд╛ , рдЬрдмрдХрд┐ рдпрд╣ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ C ++ 11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ -
рдХреИрд╡рд┐рдЯреА рдХреЗ рд╕рд╛рде рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рд╡рд╣ рд╣реИ,
рдСрдЯреЛ - рдХреГрдкрдпрд╛,
static_assert - рдмрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдПрдордПрд╕ рд╡реАрдПрд╕), рд▓реЗрдХрд┐рди
constexpr рдирд╣реАрдВ рд╣реИ ред рджреВрд╕рд░реЗ, рд╕рднреА рдХрдВрдкрд╛рдЗрд▓рд░ (рдФрд░ рдпрд╣ рдФрд░ рднреА рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ) рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдордп рдкрд░ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╣реИрдВред рдЕрдЪрд╛рдирдХ, рдПрдХ рд╣реА рд╕рдВрдХрд▓рдХ рдореЗрдВ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ
рдиреЗ рд╕рдВрдХрд▓рдХ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ
__cplusplus рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд╣реАрдВ рдмрджрд▓рд╛ , рд╣рд╛рд▓рд╛рдВрдХрд┐ C ++ 11 рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдХреА рдШреЛрд╖рдгрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХреА рдЧрдИ рд╣реИ (рдЬреЛ рд╕рдЪ рднреА рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрддреЛрд╖ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд┐рд░рдгреЗрдВ рд╣реИрдВ - рдЬреИрд╕реЗ рд╣реА рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП "рдирдпрд╛" рдЖрддрд╛ рд╣реИ) "11 рдорд╛рдирдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рддреБрд░рдВрдд рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ C99 рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдирд╣реАрдВ рд╣реИ, рдХреЛрдИ рдЕрдиреНрдп" рд╕реБрд╡рд┐рдзрд╛рдПрдБ "рдирд╣реАрдВ рд╣реИрдВ)ред рдФрд░ рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ рдХрд┐ рдорд╛рдирдХ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рдорд╛рди рдХреЛ рдЙрдкрд░реЛрдХреНрдд рдореВрд▓реНрдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ рд╡реЗ рдШреЛрд╖рд┐рдд рдорд╛рдирдХреЛрдВ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдореИрдХреНрд░реЛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╛рдЗрди рдХрд╛ рдРрд╕рд╛ рд╡рд┐рдХрд╛рд╕ (рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рд╢реБрд░реВрдЖрдд рдХреЗ рд╕рд╛рде, рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐):
standart C++98: #define __cplusplus 199711L
рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдореБрдЦреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдХрд▓рдХ "рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реБрдЖ" рд╣реИред
рдЗрд╕ рд╕рдм рдХреЗ рдХрд╛рд░рдг (рдореИрдВ рдЗрд╕ рд╢рдмреНрдж рд╕реЗ рдирд╣реАрдВ рдбрд░рддрд╛), рдЕрдм рд╣рд░ рдЧреИрд░-рдорд╛рдирдХ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬрд╛рдВрдЪ рд▓рд┐рдЦрдиреА рд╣реЛрдЧреА рдХрд┐ рдХреМрди рд╕реА C ++ рдорд╛рдирдХ рдФрд░ рдХрд┐рддрдирд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреБрдЫ рд╕рдВрдХрд▓рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдЕрдм рд╣рдо рдЗрд╕ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп
_MSC_VER рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдБрдЪ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рд╕рдорд░реНрдерд┐рдд рд╕рдВрдХрд▓рдХ рдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рд╕реА ++ рдмреЛрд░рд▓реИрдВрдб рдмрд┐рд▓реНрдбрд░ 6.0 рднреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдмрджрд▓реЗ рдореЗрдВ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ (рдЗрд╕рдХреА "рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рдФрд░ рдмрдЧреНрд╕ рд╕рд╣рд┐рдд) рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ рдереЗ, рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рдпрд╣ рдореИрдХреНрд░реЛ рднреА рд╣реИред рдХреНрд▓реИрдВрдЧ-рд╕рдВрдЧрдд рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рдореИрдХреНрд░реЛ
__has_feature ( feature_name
) рд╣реИ , рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рдпрд╛ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдирддреАрдЬрддрди, рдХреЛрдб рдХреЛ рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реИ:
#ifndef __has_feature #define __has_feature(x) 0
рдЕрдзрд┐рдХ рд╕рдВрдХрд▓рдХ рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╣рдо рдХреЛрдбрдЧрд┐рдпрд░ рд╕реА ++ рдмрд┐рд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдмреЛрд░рд▓реИрдВрдб рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ (рдЕрдкрдиреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ):
#ifndef __has_feature #define __has_feature(x) 0
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
_MSC_VER 1600 рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ
nullptr рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░
char16_t рдФрд░
char32_t , рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рдФрд░ рдЪреЗрдХ рдЬреЛрдбрд╝реЗ рдЧрдП:
#ifndef __has_feature #define __has_feature(x) 0
рдЙрд╕реА рд╕рдордп, рд╣рдо C ++ 98 рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдорд╛рдирдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХреБрдЫ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдФрд░ рд╣рдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдкреВрд░реНрдг рд╡рд┐рдХрд▓реНрдк #ifndef __has_feature #define __has_feature(x) 0
рдФрд░ рдЕрдм рдмреВрд╕реНрдЯ рд╕реЗ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрд░реА рд╕реНрдореГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореЗрд╣рдирддреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрди рд╕рднреА рд╕рдВрдХрд▓рдХ-рдЖрд╢реНрд░рд┐рдд рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдЬреЛ рдПрдХ рд╕рдорд░реНрдерд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХрд╛ рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдореИрдВ рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдФрд░ рди рд╣реА рдЗрд╕реЗ рдЫреВрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдХрд▓рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдЕрд╢реБрджреНрдзрд┐ рдкрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдХрд▓рдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХреЗрд╡рд▓ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ред
рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЙрдкрд▓рдмреНрдзрд┐, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреЛрдб рднрд░ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░-рдирд┐рд░реНрднрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╕рдВрднрд╡ рдерд╛, рдЬреЛ рдХреЛрдб рдХреНрд▓реАрдирд░ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рджрд░реНрдЬрдиреЛрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдвреЗрд░ рднреА рдирд╣реАрдВ рд╣реИред рд╣рдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХ 11 рдХреА рдпрд╛рдж рдЖ рд░рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдФрд░ рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕
static_assert рдкрд░рд┐рдЪрдп рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВредstatic_assert
рд╣рдо
StaticAssertion рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реЗрдЧрд╛ - рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреА, рдпрджрд┐ рдпрд╣ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
рдЭреВрдареА рд╣реИ ), рдПрдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдФрд░
рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ ( рд╕реНрдЯреЗрдЯрд┐рдХрдПрд╕реЗрд░реНрд╕рд┐рдпрди ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдбрдореА рд╕рдВрд░рдЪрдирд╛ред
namespace stdex { namespace detail { template <bool> struct StaticAssertion; template <> struct StaticAssertion<true> { };
рдФрд░ рдЖрдЧреЗ рдореИрдХреНрд░реЛ рдЬрд╛рджреВ
#ifdef _STDEX_NATIVE_CPP11_SUPPORT #define STATIC_ASSERT(expression, message) static_assert((expression), #message) #else
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
STATIC_ASSERT(sizeof(void*) == 4, non_x32_platform_is_unsupported);
рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдорд╛рдирдХ рдПрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрддрд╛рдП рдмрд┐рдирд╛ рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдХреЛрдИ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕реА ++ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирд╛рдо, рдФрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрдпрдирд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдХрд┐ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ STATIC_ASSERT рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ C ++ 11 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред
__Cplusplus рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рд╕рдВрдХрд▓рдХ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ C ++ 11 рд╕рдорд░реНрдерди (рдФрд░ рдЗрд╕рд▓рд┐рдП
static_assert ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рдЬреЛ _STDEX_NATIVE_CPP11_SOSPORT рджреНрд╡рд╛рд░рд╛
рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рдорд╛рдирдХ
static_assert рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
#ifdef _STDEX_NATIVE_CPP11_SUPPORT #define STATIC_ASSERT(expression, message) static_assert((expression), #message)
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ STATIC_ASSERT рдореИрдХреНрд░реЛ рдХрд╛ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдирд╣реАрдВ рд╣реИ , рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдСрдкрд░реЗрдЯрд░ # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдорд╛рдирдХ static_assert рдореЗрдВ рд╕рдВрдЪрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ ред
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдХрд▓рдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рдЧреНрд▓реВрдЗрдВрдЧ" рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдореИрдХреНрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ (рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдСрдкрд░реЗрдЯрд░
## рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╕ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ)ред
#define CONCATENATE(arg1, arg2) CONCATENATE1(arg1, arg2) #define CONCATENATE1(arg1, arg2) CONCATENATE2(arg1, arg2) #define CONCATENATE2(arg1, arg2) arg1##arg2
рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ #define CONCATENATE ( arg1 , arg2 ) arg1 ## arg2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ arg1 рдФрд░ arg2 рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА CONCATENATE рдореИрдХреНрд░реЛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛред
рд╕реБрдВрджрд░ рдирд╛рдо __static_assertion_at_line_ {рд╕реНрдЯреНрд░рд┐рдВрдЧ тДЦ}
(__LINE__ рдореИрдХреНрд░реЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд╣ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рднреАрддрд░ рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рдХрд╛рд░ STATIC_ASSERTION_FAILED_AT_LINE_ рдирд╛рдорд┐рдд
StaticAssertion рдЬреЛрдбрд╝рдиреЗ {тДЦ рдкрдВрдХреНрддрд┐рдпреЛрдВ} _WITH __ {рдкрд╛рда рдХреЗ рд╕рд╛рде рдпрд╣ рднреА рдШреЛрд╖рдгрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЙрд▓рд┐рдВрдЧ рдореИрдХреНрд░реЛ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢}ред
#define STATIC_ASSERT(expression, message)\ struct CONCATENATE(__static_assertion_at_line_, __LINE__)\ {\ stdex::detail::StaticAssertion<static_cast<bool>((expression))> CONCATENATE(CONCATENATE(CONCATENATE(STATIC_ASSERTION_FAILED_AT_LINE_, __LINE__), _WITH__), message);\ };\ typedef stdex::detail::StaticAssertionTest<sizeof(CONCATENATE(__static_assertion_at_line_, __LINE__))> CONCATENATE(__static_assertion_test_at_line_, __LINE__)
StaticAssertion рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ
рд╕рд╛рде, рд╣рдо рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ
STATIC_ASSERT рдореЗрдВ рдЬрд╛рдБрдЪ рдХреА
рдЬрд╛рддреА рд╣реИ , рдЬреЛ рдЗрд╕реЗ
рдмреВрд▓ рддрдХ рд▓реЗ рдЬрд╛рддреА рд╣реИ ред рдЕрдВрдд рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп-рдУрд╡рд░рд╣реЗрдб рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, aticstory_serertion_test_at_line_ {рд▓рд╛рдЗрди рдирдВрдмрд░} рдирд╛рдо рдХреЗ рд╕рд╛рде
StaticAssertionTest <sizeof (рдКрдкрд░ рдШреЛрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдирд╛рдо
) рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд╛рдордХрд░рдг рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реБрдВрджрд░рддрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдореБрдЦрд░ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрдЦрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрдХрд╛рд░-рдкреНрд░рдХрд╛рд░ рдХреА рдЪрд╛рд▓ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ
рд╕реНрдЯреИрдЯрд┐рдХрд╕рд░реНрд╕реЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреНрд▓рд╛рд╕ рдХреЛ
рддреБрд░рдВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрднреА рдШреЛрд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░
рдкрд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред
STATIC_ASSERT рдкрд░рд┐рдгрд╛рдордЬреАрд╕реАрд╕реА:
30: 103: рддреНрд░реБрдЯрд┐: рдлрд╝реАрд▓реНрдб 'STATIC_ASSERTION_FAILED_AT_LINE_36_WITH__non_x32_platform_is_unsupported' рдореЗрдВ рдЕрдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ 'stdex :: detail :: Staticer- рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди <рдЧрд▓рдд>' рд╣реИ
25:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ 'CONCATENATE2'
23:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE1'
30:67: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE'
24:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE2'
23:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE1'
30:79: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE'
24:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE2'
23:36: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'CONCATENATE1'
30:91: рдиреЛрдЯ: рдореИрдХреНрд░реЛ 'рд╡рд┐рд╕реНрддрд╛рд░' рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ
36: 3: рдиреЛрдЯ: рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ 'STATIC_ASSERT'
рдмреЛрд░рд▓реИрдВрдб рд╕реА ++ рдмрд┐рд▓реНрдбрд░:
[C ++ рддреНрд░реБрдЯрд┐] stdex_test.cpp (36): E2450 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ 'stdex :: detail :: StaticAssertion <0>'
[C ++ рддреНрд░реБрдЯрд┐] stdex_test.cpp (36): E2449 рдХрд╛ рдЖрдХрд╛рд░ 'STATIC_ASSERTION_FAILED_AT_LINE_36_WITH__non_x32_platform_is_unsupport' рдЕрдЬреНрдЮрд╛рдд рдпрд╛ рд╢реВрдиреНрдп рд╣реИ
[C ++ рддреНрд░реБрдЯрд┐] stdex_test.cpp (36): E2450 рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ 'stdex :: detail :: StaticAssertion <0>'
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ:
рддреНрд░реБрдЯрд┐ c2079
рджреВрд╕рд░рд╛ "рдЯреНрд░рд┐рдХ" рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрдмрдХрд┐ рдорд╛рдирдХ рд╕реЗ
рдЧрд╛рдпрдм рд╣реЛрдирд╛
рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд╣реИ - рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдирдирд╛ред рд╕рд╛рдЗрдЬрд╝рд░реНрд╕ рдЗрд╕ рдореИрдХреНрд░реЛ рдХреЛ рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ (рдЕрд░реЗ) / рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ (рдЕрд░реЗрд╕реНрдЯ [0]) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╣реБрдд рд╢реМрдХреАрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
countof
#ifdef _STDEX_NATIVE_CPP11_SUPPORT #include <cstddef> namespace stdex { namespace detail { template <class T, std::size_t N> constexpr std::size_t _my_countof(T const (&)[N]) noexcept { return N; } } // namespace detail } #define countof(arr) stdex::detail::_my_countof(arr) #else //no C++11 support #ifdef _STDEX_NATIVE_MICROSOFT_COMPILER_EXTENSIONS_SUPPORT // Visual C++ fallback #include <stdlib.h> #define countof(arr) _countof(arr) #elif defined(_STDEX_NATIVE_CPP_98_SUPPORT)// C++ 98 trick #include <cstddef> template <typename T, std::size_t N> char(&COUNTOF_REQUIRES_ARRAY_ARGUMENT(T(&)[N]))[N]; #define countof(x) sizeof(COUNTOF_REQUIRES_ARRAY_ARGUMENT(x)) #else #define countof(arr) sizeof(arr) / sizeof(arr[0]) #endif
рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрдк рд╕рдкреЛрд░реНрдЯ рд╡рд╛рд▓реЗ
рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд▓рд┐рдП,
рд╣рдо рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдПрдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕ рд╡рд░реНрдЬрди рдШреЛрд╖рд┐рдд
рдХрд░реЗрдВрдЧреЗ (рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдорд╛рдирдХреЛрдВ рдХреЗ рд▓рд┐рдП,
COUNTOF_REQUIRES_ARRAY_ARGUMENT рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ ), рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди
COUNTOF_REQUIRES_ARRAY_UMGUMY_UMGUMY_UMGUMY рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ
stdlib.h рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
_countof рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реИред
COUNTOF_REQUIRES_ARRAY_ARGUMENT рдлрд╝рдВрдХреНрд╢рди
рдбрд░рдкреЛрдХ рд▓рдЧрддрд╛ рд╣реИ рдФрд░
рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░
рдЯреА рдФрд░ рдЖрдХрд╛рд░
рдПрди рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реЗрддрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ (рдирд╣реАрдВ рд╕рд░рдгрд┐рдпреЛрдВ) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬреЛ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдкреНрд░рд╕рдиреНрди рдХрд░рддреА рд╣реИред рдХрд░реАрдм рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░, рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдХрдард┐рдирд╛рдИ рдХреЗ рд╕рд╛рде) рдХрд┐ рдпрд╣ рдЖрдХрд╛рд░
рдПрди рдХреЗ
рдЪрд╛рд░ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ
ред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЪрд╛рд╣рд┐рдП? рдпрд╣рд╛рдБ
sizeof рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЖрдХрд╛рд░рдСрдлрд╝ рдХреЙрд▓
( COUNTOF_REQUIRES_ARRAY_ARGUMENT ) рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП
рдЪрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдорд╛рдирдХ
sizeof (char) == 1, рдпрд╣ рдореВрд▓ рд╕рд░рдгреА рдореЗрдВ
рдПрди рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╕реБрдВрджрд░, рд╕реБрдВрджрд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрддред
рд╕рджреИрд╡
рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рдореИрдХреНрд░реЛ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рднреА рдЕрдирдВрдд рд▓реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╡рд╣
рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛
рд╣реИ ред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#if !defined(forever) #define forever for(;;) #else #define STRINGIZE_HELPER(x) #x #define STRINGIZE(x) STRINGIZE_HELPER(x) #define WARNING(desc) message(__FILE__ "(" STRINGIZE(__LINE__) ") : warning: " desc) #pragma WARNING("stdex library - macro 'forever' was previously defined by user; ignoring stdex macro definition") #undef STRINGIZE_HELPER #undef STRINGIZE #undef WARNING #endif
рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдирдВрдд рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдХреНрдп рд░рдЪрдирд╛:
unsigned int i = 0; forever { ++i; }
рдЗрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ "рдХреГрддреНрд░рд┐рдо рдЪреАрдиреА рдЬреЛрдбрд╝реЗрдВ" рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореИрдВ рдЗрд╕реЗ
рдлреЙрд░рдПрд╡рд░ рдкреНрд▓рдЧ-рдЗрди рдореИрдХреНрд░реЛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдЬреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рд╡рд╣реА рд╡рд╛рд░реНрдирд┐рдВрдЧ рдореИрдХреНрд░реЛ рд╣реИ рдЬреЛ рд╕рднреА рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛
рд╣рдореЗрд╢рд╛ рдХреЗ
рд▓рд┐рдП рдореИрдХреНрд░реЛ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рдкрд░рд┐рдЪрд┐рдд рдорд╛рдирдХ
__LINE__ рдореИрдХреНрд░реЛ рдФрд░ рдорд╛рдирдХ
__FILE__ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
stdex_assert
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ
рдЬреЛрд░ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП , рдореИрдХреНрд░реЛ
stdex_assert рдирд┐рдореНрди рдХреЗ рд░реВрдк
рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
#if defined(assert) #ifndef NDEBUG #include <iostream> #define stdex_assert(condition, message) \ do { \ if (! (condition)) { \ std::cerr << "Assertion `" #condition "` failed in " << __FILE__ \ << " line " << __LINE__ << ": " << message << std::endl; \ std::terminate(); \ } \ } while (false) #else #define stdex_assert(condition, message) ((void)0) #endif #endif
рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдмрд╣реБрдд рдЧрд░реНрд╡ рд╣реИ (рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛), рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдЪреЗрдХ рдХреЛ рдЫреБрдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
{{ рдЬрдмрдХрд┐ (рдЧрд▓рдд) рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ "рд╕реЗрд╡рд╛" рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рдлреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдпрдерд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдирдХ
рдореБрдЦрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ - рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд
NDEBUG рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде, рдЬреЛ рд╕рдВрдХрд▓рдХ рдЖрдорддреМрд░ рдкрд░ рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдореЗрдВ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ,
рдореБрдЦрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдПрд╕реНрдЯрд░ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИред
noexcept
рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рди рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП,
рдиреЛрдПрд╕реЗрдкреНрдЯ рдХреАрд╡рд░реНрдб рдХреЛ рдирдП рдорд╛рдирдХ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдХреНрд░реЛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рд╣реИ:
#ifdef _STDEX_NATIVE_CPP11_SUPPORT #define stdex_noexcept noexcept #else #define stdex_noexcept throw() #endif
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
noexcept рдорд╛рдирдХ
рдПрдХ bool рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдВрдХрд▓рди рд╕рдордп рд╣реИ рдХрд┐ рд╡рд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рдирд╣реАрдВ рд╣реИ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреЗрд╡рд▓ "
рд╕реНрдЯреНрд░рд┐рдкреНрдб рдбрд╛рдЙрди"
stdex_noexcept рд╣реИред
рджреВрд╕рд░реЗ рдЕрдзреНрдпрд╛рдп рдХрд╛ рдЕрдВрддред
рддреАрд╕рд░рд╛ рдЕрдзреНрдпрд╛рдп nullptr рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдЧрд╛, рдХрд┐ рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде type_traits рдХреЗ рд╡рд┐рдХрд╛рд╕, рдФрд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдЕрдиреНрдп рдХреАрдбрд╝реЗ рдХреНрдпрд╛ рд╣реИрдВ рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЖрдпрд╛ рдерд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред