void recoup(int) noexcept(true); // Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
void alloc(int) noexcept(false); // ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ noexceptΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° noexcept Π·Π°ΡΠ°ΡΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° noexcept. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ noexcept β ΡΠ½Π°ΡΠ½ΡΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ r-Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠ΅Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ sizeof (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.9), ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ noexcept Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠ²ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true:
noexcept(recoup(i)) // true, Π΅ΡΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ recoup() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ
// ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅
ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ recoup() ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ noexcept. Π Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ noexcept(Π΅) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ Ρ Π²ΡΠ΅Ρ Π²ΡΠ·Π²Π°Π½Π½ΡΡ Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈ ΡΠ°ΠΌΠ° Π΅ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² throw. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ noexcept(Π΅) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ noexcept ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
void f() noexcept(noexcept(g())); // f() ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
// ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈ g()
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ g() ΠΎΠ±Π΅ΡΠ°Π΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΡΠΎ f() ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠ»ΠΈ g() Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ f() ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ .
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ noexcept ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ: ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ noexcept.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΠ₯ΠΎΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ noexcept Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΈΠΏΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°Π»ΠΈΡΠΈΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° Π»ΡΠ±ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΎΠ±Π΅ΡΠ°Π΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ:
// recoup() ΠΈ pf1() ΠΎΠ±Π΅ΡΠ°ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
void (*pf1)(int) noexcept = recoup;
// ok: recoup() Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ; ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ,
// ΡΡΠΎ pf2() ΠΌΠΎΠΆΠ΅Ρ
void (*pf2)(int) = recoup;
pf1 = alloc; // ΠΎΡΠΈΠ±ΠΊΠ°: alloc() ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ pf1()
// ΠΎΠ±Π΅ΡΠ°Π»Π°, ΡΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ
pf2 = alloc; // ok: pf2() ΠΈ alloc() ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±Π΅ΡΠ°Π΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠ°ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅ΡΠ»ΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΡΡΠΎΠΈΡ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ΡΡΡΠΎΠΆΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠ°ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ :
class Base {
public:
virtual double f1(double) noexcept; // Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
virtual int f2() noexcept(false); // ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ
virtual void f3(); // ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ
};
class Derived : public Base {
public:
double f1(double); // ΠΎΡΠΈΠ±ΠΊΠ°: Base::f1() ΠΎΠ±Π΅ΡΠ°Π΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ
int f2() noexcept (false); // ok: ΡΠ° ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠ°ΠΊ Ρ Base::f2()
void f3() noexcept; // ok: Derived:f3() ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΡΡΡΠΎΠΆΠ΅
};
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π»Ρ Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ Π²ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ±Π΅ΡΠ°ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΡΠΎ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ noexcept. ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·Π²Π°Π½Π½Π°Ρ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠΌ ΡΠ»Π΅Π½ΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ»Π΅Π½ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ noexcept(false). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅Ρ Π΅Π΅ ΡΠ°ΠΌ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡ ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π» Π±Ρ, Π±ΡΠ΄Ρ ΡΠΎ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΡΠ΅ΠΌΡΠΉ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 18.1.4Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 18.8. ΠΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π²Π°ΡΠΈΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
18.1.5. ΠΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
ΠΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5.6.3) ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΡΠΌΠΈΡΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ (ΡΠΌ. Π³Π»Π°Π²Ρ 15), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° ΡΠΈΡ. 18.1.
Π ΠΈΡ. 18.1. ΠΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΏΠΎΠΌ exception, ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠΎΠΏΠΈΠΉ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΉ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΉ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΡΠ»Π΅Π½ what(). ΠΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠ° const char* Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Ρ Π½ΡΠ»Π΅Π²ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈ, ΠΊΠ°ΠΊ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
ΠΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ exception, bad_cast ΠΈ bad_alloc ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ. ΠΠ»Π°ΡΡΡ runtime_error ΠΈ logic_error Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΡΠΈΠ»Π΅ Π‘ ΠΈΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° string. ΠΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ what() ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ what() Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ, ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ what() Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΡ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠΈΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π·Π°ΡΠ°ΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° exception (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ). Π’Π°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠΎΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ»ΠΈ Π±Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, ΡΠ΅ΠΌ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΎΡΡΠ°ΠΆΠ°ΡΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ:
// Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°
class out_of_stock: public std::runtime_error {
public:
explicit out_of_stock(const std::string &s):
std::runtime_error(s) { }
};
class isbn_mismatch: public std::logic_error {
public:
explicit isbn_mismatch(const std::string &s):
std::logic_error(s) { }
isbn_mismatch(const std::string &s,
const std::string &lhs, const std::string &rhs):
std::logic_error(s), left(lhs), right(rhs) { }
const std::string left, right;
};
ΠΠ΄Π΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ±ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ³Π»ΡΠ±Π»Π΅Π½ΠΈΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»ΠΎΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌ ΡΠ»ΠΎΠ΅ΠΌ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ exception. ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΎΡΠΎΠΉ ΡΠ»ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π΅ ΠΎΠ±ΡΠΈΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ: ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠΈΠ±ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ»ΠΎΠΉ. ΠΠ»Π°ΡΡ out_of_stock ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΠΎ Π½Π°ΡΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΡΠ΄ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ isbn_mismatch ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΡΠΌΡ ΠΊΠ»Π°ΡΡΠ° logic_error. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ISBN, Π²ΡΠ·Π²Π°Π² ΡΡΠ½ΠΊΡΠΈΡ isbn().
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉΠ‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΊΠ»Π°ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ΄Π½Π° ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π° Π΄ΡΡΠ³Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ, ΡΡΡΡΠ°Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΡΠΌΠΌΡ ΠΊΠ»Π°ΡΡΠ° Sales_item ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ isbn_mismatch, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ISBN.