
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢
рд╕реА ++ 11 рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдХрд╛рд░рдг, рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХрддрд╛ рдХреА рдХрдореА рд╕реЗ, рдмреВрд╕реНрдЯрд░ рдиреЗ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЧрдИ C ++ 98 / C ++ 03 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдорд╛рдирдХ C ++ 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
Static_assert ,
noexcept ,
countof рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рднреА, рд╕рднреА рдЧреИрд░-рдорд╛рдирдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдФрд░ рд╕рдВрдХрд▓рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд╛рдирдХрд╛рд░реА рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреА рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред
рдирд▓реНрдЯрд░ рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╢рд╛рдорд┐рд▓ рд╣реИ , рдЬрд┐рд╕реЗ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред
рдЯрд╛рдЗрдк_рдЯреНрд░реЗрдЯреНрд╕ рдФрд░ рдЗрд╕ "рд╡рд┐рд╢реЗрд╖ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ" рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЬрд╛рдВрдЪ рдХреА, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдФрд░ рдЧрд╣рд░реЗ рд╣реЛ рдЧрдП рд╣реИрдВред
рдмреЗрд╕рдмреНрд░реА рдФрд░ рдЧреИрд░-рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде GitHub рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
рдХрдорд┐рдЯ рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
"рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ" рд╕реА ++ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╡рд┐рд╕рд░реНрдЬрди рдХреА рдирд┐рд░рдВрддрд░рддрд╛ред
рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рдкрд░рд┐рдЪрдпрдЕрдзреНрдпрд╛рдп 1. рд╡реАрдЖрдИрдПрдо рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рдбреЗрдВрд╕рдЕрдзреНрдпрд╛рдп 2. #ifndef __CPP11_SUPPORT__ #define __COMPILER_SPECIFIC_BUILT_IN_AND_MACRO_HELL__ #endifрдЕрдзреНрдпрд╛рдп 3. рд╕рд╣реА nullptr рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдвреВрдБрдврдирд╛рдЕрдзреНрдпрд╛рдп 4. рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ....
рек.рез рд╣рдо рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ....
рек.реи рд╣рдорд╛рд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рддрдиреА рдЪрдорддреНрдХрд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ....
рек.рей рдкреЙрдЗрдВрдЯрд░реНрд╕ рдФрд░ рдСрд▓-рдСрд▓-рдСрд▓....
4.4 рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдЕрдзреНрдпрд╛рдп 5
...
рдЕрдзреНрдпрд╛рдп 4. рдЯреЗрдореНрдкрд▓реЗрдЯ "рдЬрд╛рджреВ" рд╕реА ++ред рд╡рд┐рд╕реНрддрд╛рд░
4.2 рдХрд┐рддрдиреА рдЪрдорддреНрдХрд╛рд░реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЙрдЧ рд╕рдВрдХрд▓рди рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдХреЗ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ , рдмреБрдирд┐рдпрд╛рджреА
type_traits рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдФрд░ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЧрд╛рдпрдм рдереЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
is_integral рдФрд░
is_floating_point рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдереЗ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдпрд╣рд╛рдВ рд╕рд╡рд╛рд▓ рдХреЗрд╡рд▓ "рдмрдбрд╝реЗ" рдкреНрд░рдХрд╛рд░ рдХреЗ
рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдЖрдпрд╛ ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ C ++ рднрд╛рд╖рд╛ рдорд╛рдирдХ рдореЗрдВ рдХреЗрд╡рд▓ 11 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реИред рдФрд░ рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм C ++ рдорд╛рдирдХ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ (рдЬреЛ
рдХрд┐ рд╡реИрд╕реЗ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ ), рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛ред

рдХреНрдпреЛрдВрдХрд┐, 1999 рдХреЗ рдмрд╛рдж рд╕реЗ, C99 C рднрд╛рд╖рд╛ рдорд╛рдирдХ рдореМрдЬреВрдж рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рд▓рдВрдмреЗ рд▓рдВрдмреЗ int рдФрд░
рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд▓рдВрдмреЗ int рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИрдВ (1999 рдХреЗ рдмрд╛рдж рд╕реЗ!), рдФрд░ C ++ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рд╢реБрджреНрдз C рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдорд╛рдВрдЧ рдХреА, рдХрдИ рдХрдВрдкрд╛рдЗрд▓рд░ (рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдорд┐рд╢реНрд░рд┐рдд C тАЛтАЛ/ C ++) рдиреЗ C ++ 03 рдорд╛рдирдХ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕реЗ рдПрдХ рдореМрд▓рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣реА рд╣реИ, рд╕реНрдерд┐рддрд┐ рдпрд╣ рдереА рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рд╕реА рд╕реЗ) рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реА ++ рдорд╛рдирдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рднреНрд░рдо рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЛ рджреЗрдЦреЛ:
namespace detail { template <class> struct _is_floating_point : public false_type {}; template<> struct _is_floating_point<float> : public true_type {}; template<> struct _is_floating_point<double> : public true_type {}; template<> struct _is_floating_point<long double> : public true_type {}; } template <class _Tp> struct is_floating_point : public detail::_is_floating_point<typename remove_cv<_Tp>::type> { };
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░, рдкреНрд░рдХрд╛рд░ рд╕рдВрд╢реЛрдзрдХ "рдХреНрд▓рд┐рдпрд░рд┐рдВрдЧ" рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ "рд╣рд╛рдБ" рдпрд╛ "рдирд╣реАрдВ" рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
namespace detail { template <class> struct _is_integral_impl : public false_type {}; template<> struct _is_integral_impl<bool> : public true_type {}; template<> struct _is_integral_impl<char> : public true_type {}; template<> struct _is_integral_impl<wchar_t> : public true_type {}; template<> struct _is_integral_impl<unsigned char> : public true_type {}; template<> struct _is_integral_impl<unsigned short int> : public true_type {}; template<> struct _is_integral_impl<unsigned int> : public true_type {}; template<> struct _is_integral_impl<unsigned long int> : public true_type {}; #ifdef LLONG_MAX template<> struct _is_integral_impl<unsigned long long int> : public true_type {}; #endif template<> struct _is_integral_impl<signed char> : public true_type {}; template<> struct _is_integral_impl<short int> : public true_type {}; template<> struct _is_integral_impl<int> : public true_type {}; template<> struct _is_integral_impl<long int> : public true_type {}; #ifdef LLONG_MAX template<> struct _is_integral_impl<long long int> : public true_type {}; #endif template <class _Tp> struct _is_integral : public _is_integral_impl<_Tp> {}; template<> struct _is_integral<char16_t> : public true_type {}; template<> struct _is_integral<char32_t> : public true_type {}; template<> struct _is_integral<int64_t> : public true_type {}; template<> struct _is_integral<uint64_t> : public true_type {}; } template <class _Tp> struct is_integral : public detail::_is_integral<typename remove_cv<_Tp>::type> { };
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рд░реБрдХрдиреЗ рдФрд░ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред "рдкреБрд░рд╛рдиреЗ" рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ
рдЗрдВрдЯ ,
рдмреВрд▓ рдЖрджрд┐ рдХреЗ рд▓рд┐рдПред рд╣рдо
is_floating_point рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рдПрдБ рдХрд░рддреЗ рд╣реИрдВред "рдирдП" рдкреНрд░рдХрд╛рд░ рдХреЗ
рд▓рдВрдмреЗ рд▓рдВрдмреЗ int рдФрд░ рдЗрд╕рдХреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдордХрдХреНрд╖ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЛрдИ LLONG_MAX
рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ , рдЬрд┐рд╕реЗ C ++ 11 рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ C ++ рдорд╛рдирдХ рдЬреЛ C99 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ), рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХрддрдо рдХреЗ рд░реВрдк рдореЗрдВ
рдХреНрд▓рд╛рдЗрдЯ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рдЯрд╛рдЗрдк
рд▓рдВрдмреЗ рд▓рдВрдмреЗ рдЗрдВрдЯ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИред
рдХреНрд▓рд┐рдорд┐рдЯреНрд╕ рдХреА рдХреБрдЫ рдФрд░ рдореИрдХреНрд░реЛ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВ (рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рдВрднрд╡ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП), рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐, рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реА рд╕реЗ "рдмрдбрд╝реЗ" рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ (рд╕рдВрднрд╡рддрдГ) рд╕рдВрдХрд▓рдХ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдЬреЛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рд╡рд╣ рд╣реИ
char16_t рдФрд░
char32_t , рдЬреЛ C ++ 11 рдореЗрдВ рднреА рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рд╡реЗ C99 рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ (рд╡реЗ C11 рдорд╛рдирдХ рдореЗрдВ C ++ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджрд┐рдП рдереЗ), рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкреБрд░рд╛рдиреЗ рдорд╛рдирдХреЛрдВ рдореЗрдВ, рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
typedef рд▓рдШреБ char16_t , рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ)ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ (рдЕрд▓рдЧ-рдЕрд▓рдЧ) рдХреЗ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рдЬрдм рдЙрдиреНрд╣реЗрдВ
рдЯрд╛рдЗрдк- рдмреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реНрдкреЗрд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рд╡рд┐рд╡рд░рдг рдХреА рдПрдХ рдФрд░ рдкрд░рдд
:: _ is_integral рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдпреЗ рд╕реА-рд╢рд░реНрдореА "рдмрдбрд╝реЗ" рдкреНрд░рдХрд╛рд░ рдЕрднрд┐рдиреНрди рдирд┐рд░рдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред рдХреНрдпрд╛ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдорд╛рдл рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдкреНрд░рдХрд╛рд░ 11 рдорд╛рдирдХреЛрдВ рддрдХ рд╕реА ++ рдХреЗ рд▓рд┐рдП рдЧреИрд░-рдорд╛рдирдХ рд╣реИрдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ Embarcadero рд░рдЪрдирд╛рддреНрдордХрддрд╛ (Embarcadero C ++ рдмрд┐рд▓реНрдбрд░) рдХреЗ рдирд╡реАрдирддрдо C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдпреЗ рдкреНрд░рдХрд╛рд░, рдЬреЛ C ++ 11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЕрднреА рднреА рдЕрдкрдиреА 32-рдмрд┐рдЯ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЕрднрд┐рдиреНрди рдирд┐рд░рдВрддрд░ рдирд╣реАрдВ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ 20 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдереЗ рддрдм рдпрд╣ рдмреЛрд░рд▓реИрдВрдб рдЕрднреА рднреА рд╕рдЪ рдерд╛)ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╕рд╣рд┐рдд, рдорд╛рдирдХ C ++ 11 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрди 32-рдмрд┐рдЯ рдЕрд╕реЗрдВрдмрд▓реА (# рдПрдХрд▓ рдЕрдиреБрдкрд╛рдд? Chrono? рдореЗрдВ рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗ) рдЧрд╛рдпрдм рд╣реИред рдЗрдорд░реНрдмрд╛рдбреЗрд░реЛ рдиреЗ 64-рдмрд┐рдЯ рдпреБрдЧ рдХреЛ рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп рдХреЗ рд╕рд╛рде рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ: тАЬрдХреНрдпрд╛ рдЖрдк рд╕реА ++ 11 рдпрд╛ рдПрдХ рдирдпрд╛ рдорд╛рдирдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? 64-рдмрд┐рдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдПрдБ (рдФрд░ рдХреЗрд╡рд▓ рдХреНрд▓реИрдВрдЧ, рд╣рдорд╛рд░рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛)! "
рдореМрд▓рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╡рд╛рд╣реА рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХреБрдЫ рдФрд░ рд╕рд░рд▓ рдкреИрдЯрд░реНрди рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ:
рд╕рд░рд▓ рдкреИрдЯрд░реНрди template <bool, class _Tp = detail::void_type> struct enable_if { }; template <class _Tp> struct enable_if<true, _Tp> { typedef _Tp type; }; template<class, class> struct is_same : public false_type { }; template<class _Tp> struct is_same<_Tp, _Tp> : public true_type
рдХреЗрд╡рд▓ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдЕрд╕реНрдерд┐рд░ рдФрд░
рд╕реНрдерд┐рд░ ) рдпрд╣рд╛рдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХрдВрдкрд╛рдЗрд▓рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╕рдордп рд╕рдВрд╢реЛрдзрдХ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ "рдЦреЛ" рджреЗрддреЗ рд╣реИрдВред
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдореИрдВ
is_signed рдФрд░
is_unsign рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдкреНрд░рдХрд╛рд╢
рдбрд╛рд▓рддрд╛ рд╣реВрдВ :
namespace detail { template<bool> struct _sign_unsign_chooser; template<class _Tp> struct _signed_comparer { static const bool value = _Tp(-1) < _Tp(0); }; template<class _Tp> struct _unsigned_comparer { static const bool value = _Tp(0) < _Tp(-1); }; template<bool Val> struct _cat_base : integral_constant<bool, Val> {
рдЗрд╕ рднрд╛рдЧ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдмреЛрд░рд▓реИрдВрдб рд╕реА ++ рдмрд┐рд▓реНрдбрд░ 6.0 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕рдорд╛рди рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛, рдЬреЛ рдЗрди рджреЛрдиреЛрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ
рдЗрдВрдЯреАрдЧреНрд░рд▓_рдХреЙрдиреНрд╕реНрдЯреИрдВрдЯ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдВрдд рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдЖрдВрддрд░рд┐рдХ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ "рдорд┐рдорд┐рдХрд┐рдВрдЧ" рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП
рдЗрдВрдЯреАрдЧреНрд░рд▓_рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реБрдИред рдпрд╣рд╛рдВ, рд╢рд╛рдпрдж, рдпрд╣ рдЕрднреА рднреА рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рд╣реИ рдФрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдореБрд╢реНрдХрд┐рд▓ рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ
is_ * un * рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд: рдЗрдВрдЯреАрдЧреНрд░рд▓_рдХрдВрд╕реНрдЯреЗрдВрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд / рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЧреИрд░-рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░
рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖ рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ
_sign_unsign_chooser рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рддрд░реНрдХ
рдЧрд▓рдд рд╣реИ , рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╣рдореЗрд╢рд╛
рдорд╛рди рджреЗрддрд╛ рд╣реИ
== рдорд╛рдирдХ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП
рдЧрд▓рдд (рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ) рдЗрд╕рд▓рд┐рдП
_signed :: value true рд╣реЛрдЧреА)ред рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓, рдмрд▓реНрдХрд┐ рдордиреЛрд░рдВрдЬрдХ, рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рд╕рдВрдЦреНрдпрд╛ рдШрдЯрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдиреНрдпреВрдирддрдо (0 рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ) рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ, рддреЛ рдПрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдЕрдкрдиреЗ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред
рдпрд╣ рддрдереНрдп рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реИ, рд╕рд╛рде рд╣реА рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдЗрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ
рд▓рд┐рдП рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ (рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк
INT_MIN рд╕реЗ рдХрдо рдПрдХ
рдЗрдВрдЯ рдЪрд░ рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЛ
INT_MAX рдорд┐рд▓рддрд╛ рд╣реИ, рди рдХрд┐ 42 рдпрд╛ рдПрдХ рд╕реНрд╡рд░реВрдкрд┐рдд рд╣рд╛рд░реНрдб рдбрд┐рд╕реНрдХред )ред
рд╣рдо рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рд╕рд╛рдЗрди" рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
_Tp (-1) <_Tp (0) рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ -1 рдХреЗ рд▓рд┐рдП "рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо" рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕реА рддреБрд▓рдирд╛ рдмрд┐рдирд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХреА рдЬрд╛рдПрдЧреА, -1 рдХреА рддреБрд▓рдирд╛ 0 рд╕реЗ рдХреА рдЬрд╛рдПрдЧреАред
рдФрд░ рдЖрдЬ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо, рд▓реЗрдХрд┐рди рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЕрдВрддрд┐рдо "рдЪрд╛рд▓" рд╕реЗ рджреВрд░ рд╕рдВрд░реЗрдЦрдг_рдСрдлрд╝ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
namespace detail { template <class _Tp> struct _alignment_of_trick { char c; _Tp t; _alignment_of_trick(); }; template <unsigned A, unsigned S> struct _alignment_logic_helper { static const std::size_t value = A < S ? A : S; }; template <unsigned A> struct _alignment_logic_helper<A, 0> { static const std::size_t value = A; }; template <unsigned S> struct _alignment_logic_helper<0, S> { static const std::size_t value = S; }; template< class _Tp > struct _alignment_of_impl { #if _MSC_VER > 1400
Microsoft рдиреЗ рдЕрдкрдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдпрд╣рд╛рдВ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди рдЧреИрд░-рдорд╛рдирдХ __alignof рдмрд┐рд▓реНрдб-рдЗрди рдореИрдХреНрд░реЛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдмреВрд╕реНрдЯ рд╕реЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╡рд┐рдЬреБрдЕрд▓ C ++ рдпреВрдЬрд░реНрд╕ рдХреЛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ MSVC рдореЗрдВ "рдПрд▓рд╛рдЗрдирдореЗрдВрдЯ" рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
typedef long long align_t; assert(boost::alignment_of<align_t>::value % 8 == 0); align_t a; assert(((std::uintptr_t)&a % 8) == 0); char c = 0; align_t a1; assert(((std::uintptr_t)&a1 % 8) == 0);
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рднрд▓реЗ рд╣реА рдмрдврд╝рд╛рд╡рд╛ :: alignment_of <align_t> рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдХрд┐ align_t рдореЗрдВ 8-рдмрд╛рдЗрдЯ рд╕рдВрд░реЗрдЦрдг рд╣реИ, рдЕрдВрддрд┐рдо рдореБрдЦрд░ 32-рдмрд┐рдЯ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ a1 8 рдмрд╛рдЗрдЯ рд╕реАрдорд╛ рдкрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд╕реНрдерд╛рди рдкрд░ MSVC рдЖрдВрддрд░рд┐рдХ рдЖрдВрддрд░рд┐рдХ _alignof рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ :: alignment_of рд╣рдо рдЕрднреА рднреА рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ MSVC рд╕рдВрд░реЗрдЦрдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ (рдФрд░ рд╡рд╛рджреЛрдВ) рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рднрдВрдбрд╛рд░рдг рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХ рдирд╣реАрдВред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐
std :: alignment_of рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП - рдРрд╕рд╛ рдорд╛рди рд▓реМрдЯрд╛рдПрдВ рдЬреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдереЛрдбрд╝реА рд╡реНрдпрд╛рдХреБрд▓рддрд╛, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рддрддреНрд╡ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рд╣реИ, рддреЛ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ "рдЫреЗрдж" рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (
рдЖрдХрд╛рд░ рд╡рд░реНрдЧ
рд╕рдВрд░рдЪрдирд╛ { char) a;} рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ 1 рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реЛрдЧреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ рдХрд╛ 1 рдмрд╛рдЗрдЯ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди 1 + 3 рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛)ред
рдЕрдм рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо
_alignment_of_trick рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо 1 рдмрд╛рдЗрдЯ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ "рдЗрдВрдбреЗрдВрдЯ" рдХреЗ рд╕рд╛рде рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рддрддреНрд╡ рд░рдЦрддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗ рдЬрд╛ рд░рд╣реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдШрдЯрд╛рдХрд░ рд╕рдВрд░реЗрдЦрдг рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╕рдВрдХрд▓рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ
рдЪрд╛рд░ рдХреЗ рдмреАрдЪ рдПрдХ рдЦрд╛рд▓реА рдЬрдЧрд╣ "рдЫрдбрд╝реА" рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░реЗрдЦрдг рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рднреА рд╕реНрдереИрддрд┐рдХ рдЕрднрд┐рдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
namespace intern {
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ C ++ 11 рд╕реЗ
static_assert рдХреЛ рдмрджрд▓рдиреЗ рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ
рдореБрдЦрд░ рдЕрдзреНрдпрд╛рдп 2 рд╕реЗ
STATIC_ASSERT рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣рд▓реНрдХреЗ рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓
core.h рдХреЛ
type_traits рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреИрдЯрд░реНрди? рдФрд░ рднреА рд╣реЛрдВрдЧреЗ! рд╣рдо рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, SFINAE рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рдХрд╣рд╛рдиреА, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреЗ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЛ рдХреНрдпреЛрдВ рд▓рд┐рдЦрдирд╛ рдерд╛, рдЗрд╕ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред