Blog
-
C++ Tag Dispatch | Compile-Time Algorithm Selection
Tag dispatch uses empty tag types and overload resolution to pick optimal algorithms—like `std::advance` on random-access vs bidirectional iterators—wit...
-
C++ Tag Dispatching Complete Guide
Master C++ tag dispatching pattern: use empty tag types for compile-time overload resolution.
-
C++ Template Argument Deduction
Function template argument deduction: decay rules, references, arrays, perfect forwarding, CTAD overview, and how to fix deduction failures—with.
-
C++ Templates: Beginner’s Complete Guide to Generic
C++ templates: function and class templates, instantiation, typename vs class, specialization basics, and why definitions usually live in headers.
-
C++ Three-Way Comparison | The Spaceship Operator `<=>`
C++20 `operator<=>`: `default` memberwise comparison, `strong_ordering`, `weak_ordering`, `partial_ordering`, rewriting `==`, and migration from legacy.
-
C++ Tuple Cheat Sheet | std::tuple· tie
std::tuple basics: make_tuple, get, tie, tuple_cat, structured bindings (C++17), and common pitfalls for multi-value returns.
-
C++ Type Conversion | Implicit, Explicit, and User-Defined
How C++ converts types: implicit promotions, static_cast, conversion constructors and operators, explicit, and the one user-defined conversion limit—wit...
-
C++ Type Erasure Complete Guide
Master C++ Type Erasure: hide concrete types behind stable interfaces for static polymorphism.
-
C++ Uniform Initialization | Braces `{}` Explained
Uniform initialization (C++11) uses `{}` for every type: scalars, arrays, structs, classes, and containers.
-
C++ Universal (Forwarding) References Explained
Forwarding references: when T&& or auto&& deduces to bind both lvalues and rvalues, how they differ from rvalue references, and using std::forward.