
рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢
рд╕реА ++ 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. рд╕реА ++ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ
C ++ 11 рдХреАрд╡рд░реНрдб рдФрд░ рд╕рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд-рдирд┐рд░реНрднрд░ "рд╕реНрд╡рд┐рдЪ" рдХреЗ рд╕рд╛рде рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмреАрдЪ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ
type_traits рднрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рдЪ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдХреБрдЫ рдорд╛рдирдХ рдХрдХреНрд╖рд╛рдПрдВ рдереАрдВ, рдЬреЛ рдорд╛рдирдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рдереАрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рдереАрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд░рд╣реА, рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓рд╛рдкрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рднреА рдЬреЛрдбрд╝ рджрд┐рдпрд╛ред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрд╣рд╕рд╛рд╕ рдХрд┐ рдпрд╣ рд╕рдм рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЧрдгрдирд╛, рдХреЛрдб рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ, рд╕реНрдерд┐рддрд┐рдпрд╛рдВ, рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЕрдВрддрд┐рдо рд╕рдордп рдореЗрдВ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЦрд░реНрдЪ рдЖрддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ C ++ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ
рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдг рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИрдВ , рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдерд╛ рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рдорд╛рдирдХ рдХреЗ рднрд╛рдЧ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рд╕рднреА рднреНрд░рдореЛрдВ рдХреЛ рддреБрд░рдВрдд рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЯреНрдпреВрд░рд┐рдВрдЧ рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХрд╛ рдкреВрд░рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдареЛрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓реЗрдЦрди рдХрд╛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛, рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рдиреЛрдВ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ "рдЯреНрд░рд┐рдХреНрд╕" рдХреЗ рдмрдЬрд╛рдп, рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рднрдпрдВрдХрд░ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдЬрдмрдХрд┐ рд╣рд░ рдПрдХ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ "рдврд╣ рдЧрдпрд╛", рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕реНрд▓реЗрдЯреЗрдб рдЖрдВрддрд░рд┐рдХ рдбрд╛рдпрд▓рд░ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╕рдХрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ред рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЗред рдЬреАрд╕реАрд╕реА (рдЬреА ++) рдиреЗ рдЦреБрдж рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рдпрд╛, рдЬреЛ рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ "рдЪрдмрд╛рдпрд╛" рдЧрдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдЬрдЧрд╣реЛрдВ рдкрд░ рд╣реА рд╢рд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдЬрд╣рд╛рдВ рдорд╛рдорд▓рд╛ рд╕реНрдкрд╖реНрдЯ
рдЯрд╛рдЗрдкрдиреЗрдо рдХреА рдХрдореА рдерд╛)ред
рек.рез рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ
рдореИрдВрдиреЗ
std :: integral_constant ,
std :: bool_constant рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЫреЛрдЯреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреАред
template<class _Tp, _Tp Val> struct integral_constant {
рд╕рд╢рд░реНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ {, "рдФрд░" "рдпрд╛", "рдирд╣реАрдВ"} рддрд╛рд░реНрдХрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдКрдкрд░ (рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕реАрдзреЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реИ рдирд╛?):
namespace detail { struct void_type {};
рддреАрди рдмрд┐рдВрджреБ рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ:
1) рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдХреЛрдг рдХреЛрд╖реНрдардХ ('<' рдФрд░ '>') рдХреЗ рдмреАрдЪ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реНрдерд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ C ++ 11 рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рдирдХ рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рдерд╛ рдХрд┐ ' _ ' рдФрд░ '<<' рдЬреИрд╕реЗ рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ _ _ _ <_ B2 рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВред _or _ <_ B3, _B4 >> , рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рднреА рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдиреЗ рдЗрд╕реЗ рдПрдХ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛, рдЬреЛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред
2) рдХреБрдЫ рд╕рдВрдХрд▓рдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 6.0) рдореЗрдВ рдПрдХ рдмрдЧ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ void_type рдкреНрд░рдХрд╛рд░ рд╢реВрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдХреЗ рдорд╛рд░реНрдЧ рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
3) рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЛрд░рд▓реИрдВрдб рд╕реА ++ рдмрд┐рд▓реНрдбрд░) рдореЗрдВ рдПрдХ рдХреБрдЯрд┐рд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмреВрд▓ рдерд╛ , рдЬреЛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ "рдЕрдЪрд╛рдирдХ" рдЗрдВрдЯ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ ( рд╕рдЪ -> 1, рдЧрд▓рдд -> 0), рд╕рд╛рде рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░рдВрддрд░ рд╕реНрдерд┐рд░ рдЪрд░ рдмреВрд▓ (рдФрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ), рдпрджрд┐ рд╡реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рдереЗред рдЗрд╕ рд╕рдм рдЧрдбрд╝рдмрдбрд╝ рдХреЗ рдХрд╛рд░рдг, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, my_template_type :: static_bool_value == рдЭреВрдареА рдХреА рд╢реИрд▓реА рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП , рдХрдВрдкрд╛рдЗрд▓рд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдХрд░рд╛рдорд╛рддреА рдЬрд╛рд░реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ 'рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░' рдХреЛ int (0) рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ рдФрд░
рд╡рд╛рд╖реНрдкрд╢реАрд▓ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдХрд╛рдо рдЬреЛрдбрд╝реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, trivially рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛
remove_ ... рдЬрд╣рд╛рдВ рд╣рдо рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХрд░рддреЗ рд╣реИрдВ - рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП (
рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдп рд╕реЗ SFINAE рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ), рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде) :
template<class _Tp> struct is_function; template<class _Tp> struct remove_const {
рдФрд░ рдлрд┐рд░
add_ рдкреИрдЯрд░реНрди ... рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдПрд╣рд╕рд╛рд╕:
namespace detail { template<class _Tp, bool _IsFunction> struct _add_const_helper { typedef _Tp const type; }; template<class _Tp> struct _add_const_helper<_Tp, true> { typedef _Tp type; }; template<class _Tp, bool _IsFunction> struct _add_volatile_helper { typedef _Tp volatile type; }; template<class _Tp> struct _add_volatile_helper<_Tp, true> { typedef _Tp type; }; template<class _Tp, bool _IsFunction> struct _add_cv_helper { typedef _Tp const volatile type; }; template<class _Tp> struct _add_cv_helper<_Tp, true> { typedef _Tp type; }; }
рдпрд╣рд╛рдВ рд╣рдо рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд▓рд┐рдВрдХ рди рдЦреЛрдПрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ
рднреВрд▓реЗрдВрдЧреЗ рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк
рдореЗрдВ рдЕрд╕реНрдерд┐рд░ рдпрд╛
рд╕реНрдерд┐рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ "рдЬреИрд╕рд╛ рд╣реИ" рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рдРрд╕рд╛ рд╣реА рд╣реИ рдЬрдм "рд╢реИрддрд╛рди рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИ", рдпрд╛ рдпреЛрдВ рдХрд╣реЗрдВ рдХрд┐ "рдмрдЧреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИрдВред"
рдЪреМрдереЗ рдЕрдзреНрдпрд╛рдп рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдЕрдВрддред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХрд┐рддрдирд╛ рдХрдард┐рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рдХреВрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЬрд╛рджреВ рднреА рд╣реЛрдЧрд╛ред рдЖрд╣, рдФрд░ рдЕрднреА рддрдХ - рдХреНрдпреЛрдВ
рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрднрд┐рдиреНрди рдирд┐рд░рдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдВрдХрд▓рдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред