TGViewer
Библиотека C/C++ разработчика | cpp, boost, qt Библиотека C/C++ разработчика | cpp, boost, qt @cppproglib · 16.9K subscribers
Post #6780 1.71K
🍔 std::function — больше не дефолт. Знакомьтесь, std::copyable_function (C++26)

Если в новом коде ты по привычке тянешься к std::function — в C++26 для большинства случаев есть вариант лучше.

std::function живёт с C++11, но у него два врождённых дефекта. Первый — он раздувает бинарь. Второй, более коварный — дефект const-корректности: operator() помечен const, но при этом спокойно вызывает не-const operator() хранимого объекта. Починить нельзя — сломается ABI.

std::copyable_function — то, чем std::function должен был быть с самого начала: копируемый, const-корректный, поддерживает весь набор квалификаторов (const, noexcept, &/&&).


#include <functional>

// const здесь означает const на самом деле
std::copyable_function<int() const> f = [x = 42] { return x; };
int y = f(); // 42

// std::copyable_function<int() const> bad = [x=42]() mutable {...}; // ❌ mutable не пройдёт

std::copyable_function<void()> g; // пустой
// g(); // ⚠️ UB, а НЕ bad_function_call


‼️ Важный нюанс: вызов пустого copyable_function — это UB, а не исключение. Сделано осознанно, ради консистентности с остальной библиотекой.

⚠️ Не выкидывай std::function бездумно:
• у copyable_function нет target() / target_type() — никакой RTTI-интроспекции
• пустой вызов → UB вместо bad_function_call: ловившие исключение сломаются молча
• для стабильного ABI существующих интерфейсов std::function по-прежнему уместен


📍Навигация: ВакансииЗадачи Собесы

Библиотека C/C++ разработчика

#под_капотом
  • 🔥 2
More from @cppproglib
  1. Sep 19, 2026А вы уже забрали свой подарок ко Дню программиста? К вашему профессиональному празднику Tp…
  2. Sep 18, 2026От исходного кода до процессора: разберись, как работает программа 💻 Стартует практически…
  3. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  4. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  5. Sep 13, 2026🤩 Inline static в классах — забудь про .cpp Сколько раз ты забывал добавить определение s…
  6. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →