рдЙрд╕ рд╕рдордп, рдЬрдм рд▓реЗрдЦ r- рдореВрд▓реНрдп рд▓рд┐рдВрдХ рдХреА рдкреНрд░рдХреГрддрд┐ рдФрд░ рдиреБрдХрд╕рд╛рди рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗ (рдЙрдкрдпреЛрдЧреА рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг
habrahabr.ru/post/157961 ), рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд╛рдлреА рдХреБрдЫ рд╕рд╛рдзрд╛рд░рдг рдПрд▓-рдореВрд▓реНрдп рд▓рд┐рдВрдХ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╕рд╛рд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓-рдореВрд▓реНрдп рд╕рдВрджрд░реНрдн рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рд╡реИрд╕реЗ, рдПрд▓-рд╡реИрд▓реНрдпреВ рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬрд╛рдирдирд╛, рдЖрд░-рдореВрд▓реНрдп рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝рдиреЗ рдкрд░ рдПрдХ рд╕реНрдерд┐рд░ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рд╡рд╕реНрддреБ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рдХрд╛рдлреА рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
struct S{}; void f(const S& value){} f(S());
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди S () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ S () рдзреНрд╡рд╕реНрдд рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕рдЯреАрдХ рдХреНрдпреЛрдВ рд╣реИ? - рдХреНрдпреЛрдВрдХрд┐,
q(A(), B());
рд╕реГрдЬрди рдХрд╛ рдХреНрд░рдо рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдП рдФрд░ рдмреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ
int& r = 1;
рдФрд░ рдЕрдм рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдПред
рд▓реЗрдХрд┐рди рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const int& r = 1;
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдирдХ рдФрд░ рд╕реНрдЯреНрд░реЗрдиреНрд╕реЗрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░ (7.7.1)
- int рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рддрдм рдорд╛рди рдХреЛ int рдХреЗ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдФрд░ рдЕрдм рдЗрд╕ рдЕрд╕реНрдерд╛рдпреА рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рд▓рд┐рдВрдХ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╛рдиреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ
struct Obj { Obj(int i) : m_i(i) { cout << "ctr: " << m_i << endl; } ~Obj() { cout << "dtr: " << m_i << endl; } Obj operator+(const Obj& value) { return Obj(m_i + value.m_i); } int m_i; }; ... Obj o1(1); const Obj& ro2 = Obj(2) + Obj(3); Obj o6(6);
- рдСрдмреНрдЬреЗрдХреНрдЯ O1 рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛
Obj(2)
рдФрд░ Obj(3)
(рдЕрдиреБрдХреНрд░рдо рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ)- рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ
ro2
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ Obj(2)
рдФрд░ Obj(3)
рдзреНрд╡рд╕реНрдд Obj(3)
o6
рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛- рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:
o5
,
рдФрд░ o5
рдЖрдЙрдЯрдкреБрдЯ (msvs 2012):
ctr: 1 ctr: 3 ctr: 2 ctr: 5 dtr: 2 dtr: 3 ctr: 6 dtr: 6 dtr: 5 dtr: 1
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рд╣рд░ рдХреЛрдИ рдпрд╣ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрднрд╛рд╕реА рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬрдм рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рдЧреИрд░-рдЖрднрд╛рд╕реА рд╡рд┐рдзреНрд╡рдВрд╕рдХ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ
Obj
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ
struct D : Obj { D(int i) : Obj(i) { cout << "D::ctr: " << m_i << endl; } ~D() { cout << "D::dtr: " << m_i << endl; } }; Obj o1(1); const Obj& ro2 = D(5); Obj o6(6);
рдирд┐рд╖реНрдХрд░реНрд╖:
ctr: 1 ctr: 5 D::ctr: 5 ctr: 6 dtr: 6 D::dtr: 5 dtr: 5 dtr: 1
рдпрд╛рдиреА рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдирд┐рд░рдВрддрд░ рд╕рдВрджрд░реНрдн рдХрд╛ рдкреНрд░рдХрд╛рд░
const Obj&
, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ
D
"рдЬреАрд╡рди" рд╣реИ, рдЬрдмрдХрд┐ "рд╕рдВрджрд░реНрдн" рдпрд╣ "рдЬреАрд╡рди" рд╣реИред
рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: "рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ?" рдПрдХ рдЙрддреНрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
ScopeGuard
рджреГрд╖реНрдЯрд┐рдХреЛрдг (
http://www.drdobbs.com/cpp/generic-change-the-way-you-write-excepti/184403758?pgno-2 ) рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕рд╛рдзрди рд╕рдВрднрд╛рд▓ рд▓рдкреЗрдЯреВрдВрдЧрд╛ред
рдЦреИрд░, рдЫрд╛рдкреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдЕрдм рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦреЗрдВ, рдЬрдм рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реЗрдЦред
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ C ++ рд╕реБрд╡рд┐рдзрд╛ рдЦреЛрд▓ рджреА рд╣реИред
рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдорд╛рдирдХ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд░реНрдл рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ
const Obj& f() {return Obj();}
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд▓реМрдЯрд╛ рд▓рд┐рдВрдХ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд▓рд┐рдВрдХ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдорд╛рдирдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл 12.2 рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдорд╛рдирдХ рд╕реЗ рдПрдХ рдЙрджреНрдзрд░рдг рд╣реИ (рдЬреЛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЧрд┐рд▓ рдФрд░ рдордВрдЪреЛрдВ рдореЗрдВ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ):
рджреВрд╕рд░рд╛ рд╕рдВрджрд░реНрдн рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╕рдВрджрд░реНрдн рдЕрд╕реНрдерд╛рдпреА рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрддрд╛ рд╣реИред рдЕрд╕реНрдерд╛рдпреА рдЬрд┐рд╕реЗ рд╕рдВрджрд░реНрдн рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЕрд╕реНрдерд╛рдпреА рд╣реИ рдЬреЛ рдПрдХ рдЙрдк-рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрд╕реНрдерд╛рдпреА рдмрд╛рдзреНрдп рд╣реИ рд╕рдВрджрд░реНрдн рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ ctor-initializer (12.6.2) рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рд╕рджрд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд╛рдзреНрдп, рдЬрдм рддрдХ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ (5.2.2) рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдмрд╛рдзреНрдп рдХреЙрд▓ рдХреЛ рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдмрдиреА рд░рд╣рддреА рд╣реИред
рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрди рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдПрдЪред рд╕реИрдЯрд░
http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ рднрд░ рдЖрдпрд╛ред
рд╕рд╛рде рд╣реА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг
http://www.rsdn.ru/forum/cpp/4257549.flat #include <iostream> struct foo { ~foo() { std::cout << "~foo()\n"; } }; struct foo_holder { const foo &f; }; int main() { foo_holder holder = { foo() }; std::cout << "done!\n"; return 0; }
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдХрд░реНрд╖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
~foo() done!
рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╣реИ, рдФрд░ рдлрд┐рд░, рдЬреИрд╕реЗ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред
рдЖрдЙрдЯрдкреБрдЯ (msvs 2012):
~foo() done! ~foo()
рдФрд░ (g ++ (Ubuntu / Linaro 4.7.3-1ubuntu1) 4.7.3):
done! ~foo()
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдкрдХрд╛ рджрд┐рди рд╢реБрдн рд╣реЛред