ΠΠΎΠΌΠΈΡΠ΅ΡΡΡ Π½Π° ISO Π·Π° ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° C++ Π·Π°Π²ΡΡΡΠΈ ΠΈ ΡΡΠ²ΡΡΠ΄ΠΈ ΡΠΈΠ½Π°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡ βC++26β. ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈΡΠ΅ GCC, Clang ΠΈ Microsoft Visual C++. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈΡΠ΅ C++26 ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Boost.
ΠΡΠ΅Π· ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ Π΄Π²Π° ΠΌΠ΅ΡΠ΅ΡΠ° ΡΡΠ²ΡΡΠ΄Π΅Π½Π°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π° Π΅ΡΠ°ΠΏ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΠΎΠ½Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΎΠΏΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ. Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½ Π² ISO Π·Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½Π΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°Π»Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ ISO/IEC 14882:2026.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° C++26:
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ (Contracts), ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠΎΡΠΌΠ°Π»Π½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΈ Π½ΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°: pre (ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΠ΅), post (ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠ΅) ΠΈ contract_assert (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΡ). ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡΡ βpreβ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ); βpostβ β ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΠ°Π·Π²Π°Ρ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ (ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ); contract_assert β ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² GCC 16. int f(const int x) pre (x != 1) // ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ post (r : r == x && r != 2) // ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°; r β ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° { contract_assert (x != 3); return x; }
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ (Reflection), ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π½Π° Π΅ΡΠ°ΠΏ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ β^^β Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π³ΡΠ°ΠΌΠ°ΡΠΈΡΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈ β[:β¦:]β Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅. ΠΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° std::meta, Π° Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΠ° ΡΠ°ΠΊΠΈΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π² GCC 16. constexpr int i = 42, j = 42; constexpr std::meta::info r = ^^i, s = ^^i; static_assert(r == r && r == s); static_assert(^^i != ^^j); // βiβ ΠΈ βjβ ΠΈΠΌΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. static_assert(constant_of(^^i) == constant_of(^^j)); // βiβ ΠΈ βjβ ΡΠ° Π΅Π΄Π½Π°ΠΊΠ²ΠΈ static_assert(^^i != std::meta::reflect_constant(42)); // ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΡΠ΅ ΠΎΡ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° 42
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡΡ Β«template forΒ» Π·Π° ΠΈΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ (ΠΌΠ΅ΡΠ°ΠΎΠ±Π΅ΠΊΡΠΈ) Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π² ΡΡΠΈΠ» Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΡΠΈΠΊΡΠ». ΠΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Β«template forΒ» ΡΡΠ»ΠΎΡΠΎ Π½Π° ΡΠΈΠΊΡΠ»Π° ΡΠ΅ ΡΠ°Π·ΠΊΡΠΈΠ²Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΈ Π²ΡΡΠΊΠ° ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π² ΠΎΡΠ΄Π΅Π»Π½Π° ΠΎΠ±Π»Π°ΡΡ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°, ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠ° ΡΠ΅ Π² ΡΠΈΠΊΡΠ»Π°, Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡΡΠ° Β«template forΒ» ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈ Π·Π° ΠΎΠ±Ρ ΠΎΠ΄ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΈΠ·Π±ΡΠΎΡΠ²Π°Π½ΠΈΡ. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π² GCC 16. void f() { template for (constexpr int I : std::array{1, 2, 3}) { static_assert(I < 4); } } ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·ΠΊΡΠΈΡΠΎ Π²: void f() { { constexpr auto&& __range = std::array{1, 2, 3}; constexpr auto __begin = __range.begin(); constexpr auto __expansion-size = __range.end() β __begin; // 3 { constexpr int I = *(__begin + 0); static_assert(I < 4); } { constexpr int I = *(__begin + 1); static_assert(I < 4); } { constexpr int I = *(__begin + 2); static_assert(I < 4); } } }
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡΡ std::execution Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄. ΠΡΠΈΠ³ΡΡΡΠ²Π°Ρ ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ scheduler, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠΈ (Π½ΠΈΡΠΊΠ°, ΠΏΡΠ» ΠΎΡ Π½ΠΈΡΠΊΠΈ, GPU, event loop), sender, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ°Π±ΠΎΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈ receiver β ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°. using namespace std::execution; scheduler auto sch = thread_pool.scheduler(); sender auto begin = schedule(sch); sender auto hi = then(begin, []{ std::cout < "Hello world! Have an int."; return 13; }); sender auto add_42 = then(hi, [](int arg) { return arg + 42; }); auto [i] = this_thread::sync_wait(add_42).value();
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° std::simd Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΡΡ Ρ Π΄Π°Π½Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ SIMD, ΠΊΠ°ΡΠΎ AVX-512 ΠΈ NEON, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ C++. std::simd a = {1.0f, 2.0f, 3.0f, 4.0f}; std::simd b = {5.0f, 6.0f, 7.0f, 8.0f}; std::simd result = a + b;
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π²Π΅ΠΊΡΠΎΡ (ΠΌΠ°ΡΠΈΠ²) Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ² ΡΠ°Π·ΠΌΠ΅Ρ std::inplace_vector, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΡΡΠ΅ΠΊΠ°, ΡΠΈΠΉΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. API-ΡΠΎ Π΅ Π±Π»ΠΈΠ·ΠΊΠΎ Π΄ΠΎ std::vector, Π½ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ²Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π½Π΅ Π² Β«ΠΊΡΡΠ΅Β», Π° Π²ΡΡΡΠ΅ Π² ΠΎΠ±Π΅ΠΊΡΠ°. inplace_vector a(10); inplace_vector b(std::move(a)); assert(a.size() == 10);
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° Β«#embedΒ», ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π·Π° Π²Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ Π² ΠΊΠΎΠ΄Π°. const unsigned char icon_display_data[] = { #embed "art.png" };
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° Π΅ΡΠ°ΠΏ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΏΡΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° constexpr. constexpr std::optional checked_divide(unsigned n, unsigned d) { try { return divide(n, d); } catch (β¦) { return std::nullopt; } } constexpr date parse_date(std::string_view input) { auto [correct, year, month, day] = ctre::match(input); if (!correct) { throw incorrect_date{input}; } return build_date(year, month, day); }
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΡΡΡΡΠΊΡΡΡΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ std::hive Π·Π° Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π° ΡΠ»Π΅Π΄ ΠΈΠ·ΡΡΠΈΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ. Π‘ΡΡΡΠΊΡΡΡΠ°ΡΠ° Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π·Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½ΠΎΡΡ Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΡΠ΅Π΄. ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΠΌΠ°ΡΠΈΠ²ΠΈΡΠ΅, ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ Π² std::hive Π½Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ, Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π²Π° ΠΈΠ·ΡΡΠΈΡΠΈΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠΎ ΠΏΡΠ°Π·Π΅Π½, Ρ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΎ Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π°ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ² Π΅Π»Π΅ΠΌΠ΅Π½Ρ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° std::linalg Ρ API Π·Π° Π»ΠΈΠ½Π΅ΠΉΠ½Π° Π°Π»Π³Π΅Π±ΡΠ°, Π±Π°Π·ΠΈΡΠ°Π½Π° Π½Π° BLAS.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Hazard pointer, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ, Ρ ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π² Π΄ΡΡΠ³ΠΈ Π½ΠΈΡΠΊΠΈ, Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ ΡΠΎΠΉ ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π²Π° ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΡΠΈΡ, Π½ΠΎ ΠΏΠ°ΠΌΠ΅ΡΡΠ°, Π·Π°Π΅ΠΌΠ°Π½Π° ΠΎΡ ΠΎΠ±Π΅ΠΊΡΠ°, ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π½ΠΈΡΠΊΠΈ ΡΠ²Π°Π»ΡΡ hazard-ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΎΠ±Π΅ΠΊΡΠ°.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ RCU (Read-Copy Update) β ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° Π·Π°ΠΏΠΈΡ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°, Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π΅ ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ°Ρ, Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΡΡΡ ΡΡΠ°ΡΠΈΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. Π‘Π»Π΅Π΄ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½ΠΎΠ²ΠΈΡΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΠ°Π²Π° Π°ΠΊΡΠΈΠ²Π΅Π½ ΠΈ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Ρ Π½Π΅Π³ΠΎ, Π° ΡΡΠ°ΡΠΈΡΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ²Π° ΡΠ»Π΅Π΄ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΠΈΡΠ΅ Π³ΠΎ ΠΏΠΎΡΠΎΡΠΈ.
- ΠΠ½Π΅ΡΠ΅Π½ΠΈ ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π·Π° ΡΡΠΈΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΠΈ ΠΈΠ·Π²ΡΠ½ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° Π±ΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° "constexpr reference operator[](size_type idx) const;" ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΡΠΎ "idx < size()".
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° "constexpr" Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° "new" (placement new) Π·Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ²ΡΡΠ·ΠΊΠΈ (structured binding) Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° Β«constexprΒ», Ρ.Π΅. ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΡΠ΅Π³Π° ΡΡΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π·Π° ΠΌΠ°ΡΠΈΠ²ΠΈ ΠΈ ΠΏΡΠΎΡΡΠΈ ΡΡΡΡΠΊΡΡΡΠΈ. constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
- Π ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° β...β Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π·Π°Ρ Π²Π°ΡΠ°Ρ ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ. auto [x,y,z] = f(); // Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ x, y, z ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ ΡΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°, Π²ΡΡΠ½Π°ΡΠΈ ΠΎΡ f(). auto [β¦xs] = f(); // Π² ΠΏΠ°ΠΊΠ΅ΡΠ° xs ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²ΡΠΈΡΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ, Π²ΡΡΠ½Π°ΡΠΈ ΠΎΡ f(). auto [x, ...rest] = f(); // Π x ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΡΠ²ΠΈΡΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ, Π° Π² rest β ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅. auto [x, y, ...rest] = f(); // Π x ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΡΠ²ΠΈΡΡ Π΅Π»Π΅ΠΌΠ΅Π½Ρ, Π² y β Π²ΡΠΎΡΠΈΡΡ, Π° Π² rest β ΡΡΠ΅ΡΠΈΡΡ. auto [x, ...rest, z] = f(); // Π² x β ΠΏΡΡΠ²ΠΈΡΡ, Π² rest β Π²ΡΠΎΡΠΈΡΡ, Π² z β ΡΡΠ΅ΡΠΈΡΡ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Β«ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π°ΡΠ° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅Β» (Trivial Relocatability), ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅ΠΌeΡΡΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠΏ ΡΡΠ΅Π· ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈΠΌ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π±Π΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ ΠΈΠ»ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈ. ΠΠ° ΠΊΠ»Π°ΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° memberwise_trivially_relocatable ΠΈ memberwise_replaceable, Π° Π·Π° Π½ΠΈΡΠΊΠΎΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠ±Π΅ΠΊΡΠ° ΡΠ° Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ trivially_relocate_at ΠΈ trivially_relocate.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ main() Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ» ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ main() Π² ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Β«friendΒ» (Β«friend Tsβ¦Β»).
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΈ Π·Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ²ΡΡΠ·ΠΊΠΈ;
- ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ β= delete(Β«ΠΏΡΠΈΡΠΈΠ½Π°Β»)β.
- Π Π±Π°Π·ΠΎΠ²ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Β«@Β», Β«$Β» ΠΈ Β«`Β».
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ (structured binding) ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ if ΠΈ switch.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ-Π·Π°ΠΏΡΠ»Π½ΠΈΡΠ΅Π»ΠΈ Ρ ΠΈΠΌΠ΅ Β«_Β» Π² Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΠΎΠ±Π»Π°ΡΡ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π³Π° Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ°: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌ -Wunused }
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΠΈΠ½Π³ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ°ΡΠΈΠ² ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π² ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ½ΠΈΡ ΠΊΠΎΠ΄, Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ°Π½Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΈ ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ _Pragma, asm, extern, static_assert, [[deprecated]] ΠΈ [[nodiscard]].
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ: Β«__builtin_is_within_lifetimeΒ» Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ Π² ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ (union) ΠΈ Β«__builtin_is_virtual_base_ofΒ» Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π»ΠΈ Π±Π°Π·ΠΎΠ²ΠΈΡΡ ΠΊΠ»Π°Ρ Π΅ Π²ΠΈΡΡΡΠ°Π»Π΅Π½.
- Π Π΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ° ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ Π±Π΅Π·ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠΈΠΊΠ»ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
- ΠΡΠΈΠ³ΡΡΠ΅Π½ΠΎ Π΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ Π½Π΅ΠΏΡΠ»Π΅Π½ ΡΠΈΠΏ.
- ΠΠ±ΡΠ²Π΅Π½ Π·Π° ΠΎΡΡΠ°ΡΡΠ» ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²Π°ΡΠΈΠ°ΡΠΈΠ²Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅ Π±Π΅Π· ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π° Β«void e(intβ¦)Β» Π²ΠΌΠ΅ΡΡΠΎ Β«void e(int, β¦)Β»).
- ΠΠ°Π±ΡΠ°Π½Π΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°ΠΊΡΠΎΡΠΈ Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ.
- ΠΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Π² ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΡΠ° Π½Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅ΡΠ²Π½ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΈΠ·Π±ΠΈΡΠ°Π΅ΠΌΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ. int main() { enum E1 { e }; enum E2 { f }; bool b = e <= 3.7; // ΠΎΡΡΠ°ΡΡΠ»ΠΎ int k = f β e; // ΠΎΡΡΠ°ΡΡΠ»ΠΎ int x = +f β e; // OK }
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π°. int arr1[5]; int arr2[5]; bool same = arr1 == arr2;
- Π¨Π°Π±Π»ΠΎΠ½Π½ΠΈΡΡ ΠΊΠ»Π°Ρ is_trivial Π΅ ΠΎΠ±ΡΠ²Π΅Π½ Π·Π° ΠΎΡΡΠ°ΡΡΠ».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
