Skip to main content

394 docs tagged with "c++"

View all tags

Access Control

Access control (public, private, protected) enables encapsulation by controlling which code can access class members.

Actor lifecycle

Every AActor โ€” GameMode, Pawn, a static prop, your custom gameplay actor โ€” goes through the same

Aggregate Initialization

Initialize arrays and simple structs using brace-enclosed lists without constructors. Concise syntax for multiple members.

Alignment and offsetof

Every type has an alignment: an address it must start on, always a power of two. char can live

Allocators

Allocators are objects that manage memory allocation for STL containers. They provide a standardized interface for customizing how containers acquire and release memory.

Arithmetic Operators

Arithmetic operators compute numeric results from numeric operands. The surface syntax is

Assembling Phase

The assembler converts human-readable assembly code into binary machine code (object files). Each assembly instruction becomes actual CPU instructions.

Async vs sync trade-offs

Async logging is not strictly better than sync โ€” it trades tail latency and complexity for

Attenuation and submixes

Two separate systems decide what a sound sounds like once it's playing: attenuation decides how loud,

Audio engine overview

Every gunshot, footstep, and music cue in a UE5 project passes through the same pipeline before it

auto Type Deduction

auto lets the compiler deduce variable types from initializers, reducing verbosity and improving maintainability.

Backtrace and crash dump

The messages you want after a failure are almost always the debug-level ones you weren't writing to

Basic formatting

spdlog's format strings are fmt's format strings โ€” the same {} mini-language, with the same

Binary formats

CBOR, MessagePack, BSON, UBJSON, and BJData all describe the same data model JSON does โ€” the same

Bitwise Operators

Bitwise operators manipulate the individual bits of integer values. They are the building blocks of

BOOST_FOREACH

BOOST_FOREACH is a preprocessor macro that provides range-based iteration on compilers that

boost::intrusive_ptr

boost::intrusive_ptr is a reference-counting smart pointer that keeps the count inside the

Boost.Accumulators

Boost.Accumulators is a framework for incremental statistical computation. You push data

Boost.Algorithm

Boost.Algorithm is a collection of general-purpose algorithms that complement ``. Many

Boost.Any

boost::any is a container for a single value of any type, decided at runtime. Where

Boost.Asio

Boost.Asio is the asynchronous I/O framework at the heart of modern C++ networking and

Boost.Assert

Boost.Assert is a tiny header-only library that replaces the C standard assert macro with a more

Boost.Atomic

Boost.Atomic provides atomic operations with explicit memory-ordering guarantees โ€” the building

Boost.Beast

Boost.Beast is a header-only C++ library for HTTP and WebSocket, built directly on top of

Boost.Bimap

boost::bimap is a bidirectional map โ€” a container where both sides are keys. Given a

Boost.Bind

boost::bind creates a new function object by partially applying arguments to an existing

Boost.Build (b2)

Boost.Build is Boost's own build system โ€” the toolchain Boost uses to compile itself. Its driver

Boost.Chrono

Boost.Chrono is the duration, time_point, and clock library that directly preceded std::chrono

Boost.CircularBuffer

boost::circular_buffer is a fixed-capacity ring buffer that provides O(1) insertion and

Boost.Container

Boost.Container provides STL-compatible containers that go beyond what the standard library

Boost.Core

Boost.Core is the dependency-light foundation of the whole Boost ecosystem: a grab-bag of small,

Boost.Coroutine2

Boost.Coroutine2 provides stackful coroutines โ€” functions that can suspend and resume while

Boost.DLL

boost::dll provides portable shared-library loading โ€” open a .so, .dll, or .dylib at

Boost.Fiber

Boost.Fiber provides user-space cooperative threads (fibers). A fiber looks like a thread โ€” it

Boost.Filesystem

boost::filesystem provides portable file and directory operations โ€” path manipulation,

Boost.Format

boost::format gives you type-safe, positional string formatting using a printf-inspired

Boost.Function

boost::function is a polymorphic function wrapper โ€” it can store and invoke any callable

Boost.Fusion

Boost.Fusion is a library for working with heterogeneous collections โ€” containers whose elements

Boost.Geometry

Boost.Geometry is a computational geometry library that works with points, linestrings,

Boost.Hana

Boost.Hana is a modern C++14 metaprogramming library that replaces the template-heavy

Boost.Interprocess

Boost.Interprocess provides portable inter-process communication (IPC) primitives: shared

Boost.Intrusive

Boost.Intrusive provides containers where the link/hook metadata lives inside the elements

Boost.Iostreams

boost::iostreams is a framework for building filtering streams โ€” chains of sources, sinks, and

Boost.Iterator

Boost.Iterator provides tools for building and adapting iterators without the boilerplate that

Boost.JSON

Boost.JSON is a header-only, RFC 8259 compliant JSON library added in Boost 1.75. It provides

Boost.LexicalCast

boost::lexical_cast(source) converts between text and almost any type with a single, uniform

Boost.Lockfree

Boost.Lockfree provides lock-free and wait-free data structures โ€” concurrent queues and

Boost.Log

Boost.Log is a structured logging framework for C++ that separates the concerns of producing

Boost.Math

Boost.Math is a comprehensive mathematics library that goes far beyond what `` provides.

Boost.MPL

The Boost Metaprogramming Library (MPL) is the original framework for compile-time programming

Boost.MultiIndex

Boost.MultiIndex lets you build a single container with multiple simultaneous indexes over the

Boost.Multiprecision

Boost.Multiprecision provides integer, rational, and floating-point types with arbitrary or

Boost.Optional

boost::optional represents a value that may or may not be present โ€” a nullable value that does

Boost.Phoenix

Boost.Phoenix is a functional-programming toolkit for C++ that lets you build function objects

Boost.Polygon

Boost.Polygon is a computational geometry library focused on integer-coordinate polygon

Boost.Pool

Boost.Pool is a fast memory allocator specialised for handing out many objects of the same fixed

Boost.Preprocessor

Boost.Preprocessor is a header-only library that turns the C preprocessor โ€” a blunt text-substitution

Boost.Process

boost::process provides cross-platform subprocess management โ€” launch child processes, capture

Boost.Program_options

boost::program_options parses command-line arguments, config files, and environment variables

Boost.PropertyTree

Boost.PropertyTree provides a tree-shaped data structure (ptree) with parsers and generators

Boost.Random

Boost.Random provides a framework of random number engines and distributions that separate

Boost.Range

Boost.Range replaces iterator pairs with range objects and provides range adaptors โ€”

Boost.Rational

boost::rational represents an exact fraction as a numerator/denominator pair. Every

Boost.Regex

boost::regex is a regular expression engine for C++ that supports Perl and POSIX syntax. It

Boost.Serialization

Boost.Serialization converts C++ objects to and from a sequence of bytes โ€” serialization and

Boost.Signals2

Boost.Signals2 is a header-only implementation of the signal/slot mechanism โ€” a type-safe,

Boost.Spirit

Boost.Spirit is a parser and generator framework that lets you write grammars directly in C++

Boost.Stacktrace

Boost.Stacktrace lets you capture and print call stacks programmatically from within a C++

Boost.StringAlgo

boost::string is a collection of generic string algorithms โ€” case conversion,

Boost.System

boost::system provides the error_code and error_category framework โ€” a structured, extensible

Boost.Test

Boost.Test is a unit testing framework for C++ that provides test case definition, rich

Boost.Thread

Boost.Thread provides portable threading primitives โ€” threads, mutexes, condition variables, futures,

Boost.Tokenizer

boost::tokenizer breaks a string into tokens using pluggable separator functions. It

Boost.TypeTraits

Boost.TypeTraits provides a collection of compile-time type introspection and type

Boost.uBLAS

Boost.uBLAS (micro Basic Linear Algebra Subprograms) provides vector and matrix types with

Boost.Units

Boost.Units brings compile-time dimensional analysis to C++. It wraps numeric values in

Boost.Unordered

Boost.Unordered provides hash-based associative containers โ€” unorderedmap, unorderedset,

Boost.Utility

Boost.Utility is one of the oldest corners of Boost: a historical collection of miscellaneous

Boost.UUID

Boost.UUID is a small, header-only library for creating and manipulating Universally Unique

Build Systems and CMake

Build systems automate compilation, dependency management, and linking. They track changes and rebuild only what's necessary, making large C++ projects manageable.

C++ Basic Syntax

C++ syntax defines how code is written and structured. Understanding basic syntax is essential for writing valid C++ programs.

C++ Compilation Pipeline

The C++ compilation process transforms source code into executable binary through four main stages: preprocessing, compilation, assembly, and linking.

C++ Ecosystem & C vs C++

The C++ ecosystem encompasses compilers, build systems, package managers, IDEs, libraries, and testing frameworks. Understanding this landscape is crucial for effective C++ development.

C++ versus Blueprint

Every doc in this section assumes a specific split: systems and data live in C++; composition and

Calling Conventions

Calling conventions define how functions receive parameters and return values at the assembly level - register usage, stack cleanup, and parameter passing order.

Camera and spring arm

Attach a UCameraComponent straight to a character's mesh and two problems show up immediately: the

Chaos physics basics

Chaos is Unreal 5's physics and destruction engine, replacing PhysX. Most gameplay code never calls into

Chrono Library (Time)

The chrono library provides type-safe time utilities for durations, time points, and clocks. It's designed to prevent common time-related bugs through strong typing.

Class Memory Layout

This page explains how the class features you write โ€” members, virtual functions, inheritance โ€”

Class Templates

Class templates create generic classes that work with different types. Think std::unique_ptr - same class, different types.

Color and text styles

Terminal color is a formatting concern, and fmt handles it with the same type-safe API used

Commandlets and automation

Everything covered so far in this folder โ€” Details customizations, factories, Editor Utility Widgets โ€”

Common pitfalls

Nearly every fmt bug that reaches production is a lifetime bug or a

CommonUI

CommonUI is Epic's plugin for controller-friendly, platform-portable UI, built on top of UMG rather than

Compilation Phase

The compilation phase translates preprocessed C++ code into assembly language. This is where syntax checking, semantic analysis, optimization, and code generation happen.

Compile-time log level

A runtime level check is cheap, but it isn't free โ€” it's still a branch and, on the disabled path,

Concepts and Requires Expressions (C++20)

Concepts are named requirements for template arguments that replace SFINAE and enable_if with readable constraints. Requires expressions are the building blocks that check if code compiles at compile-time.

Console sinks

Console output is the default destination because it's the one that always exists โ€” no file

const and volatile Qualifiers

CV-qualifiers (const and volatile) modify type behavior. const prevents modification; volatile prevents compiler optimization.

const Pointers

const with pointers creates three distinct scenarios. Understanding the difference prevents bugs and documents intent.

constexpr Functions

constexpr indicates values or functions can be evaluated at compile-time, enabling compile-time computation and optimization.

Constructors and Destructors

Constructors initialize objects and allocate resources. Destructors clean up when objects are destroyed. Together they enable RAII (Resource Acquisition Is Initialization).

Copy and Move Semantics

Copy creates a duplicate of an object. Move transfers ownership of resources from one object to another. Understanding when each happens is crucial for performance and correctness.

Coroutines (C++20)

A coroutine is a function that can suspend itself, hand control back to its caller, and later

Crash reporting

A crash on a player's machine, with no debugger attached and no way to reproduce it locally, is only

Creating JSON values

Construction is where the library's convenience is loudest โ€” you can build a document out of

Creating loggers

There are two ways to make a logger: the factory helpers, which build a sink and register the logger

Cross-Compilation

Cross-compilation builds executables for a different platform (target) than the one running the compiler (host). Essential for embedded systems, mobile development, and deploying to different architectures.

Custom asset types

A UDataAsset subclass is usable the moment you compile it โ€” but "usable" and "designer-friendly" are

Custom Deleters

Extend smart pointers to manage any resource requiring special cleanup beyond delete. Enable RAII for files, handles, connections, locks - anything needing cleanup.

Custom formatters

When no built-in pattern flag carries the field you need โ€” a request id, a thread name, a tenant โ€”

Custom movement modes

Wall-running, climbing, grappling, and swimming-that-isn't-MOVE_Swimming all eventually lead you to

Custom sinks

A custom sink is the supported way to send logs anywhere spdlog doesn't already reach โ€” an in-memory

Damage and hit handling

Collision and physics tell you that something touched, but they don't know what "damage" means โ€” that's

Debugging in Visual Studio

Unreal's containers, reflection system, and string types don't display usefully in a stock debugger โ€”

decltype

decltype deduces the type of an expression, preserving references and const qualifiers exactly.

decltype(auto)

decltype(auto) (C++14) combines auto convenience with decltype precision - deduces type while preserving references and const.

Default Initialization

Object created without explicit initializer. Behavior depends on type and storage duration. Dangerous for fundamental types in local scope.

Delegates and events

Delegates are Unreal's answer to "call this function later, without the caller knowing what type owns

Design philosophy

The project's own README states its goals plainly: intuitive syntax, trivial integration, and

Design philosophy

Three decisions explain almost every API in spdlog: formatting is delegated to fmt, sinks are the

Details panel customization

The default Details panel โ€” the one every UCLASS and USTRUCT gets for free โ€” is a generic property

Differences Between C++ Standards

C++ evolves through standardized versions released approximately every three years. Each standard adds features, fixes issues, and modernizes the language while maintaining backward compatibility.

Dynamic vs Static Polymorphism

C++ supports two forms of polymorphism: dynamic (runtime, using virtual functions) and static (compile-time, using templates). Each has different trade-offs.

Editor-only modules

Every custom editor tool you write โ€” a Details panel customization, a custom asset factory, an Editor

Element access

There are four ways to read a key or index out of a json, and they disagree on what happens when

Engine architecture map

Every later doc in this section assumes you can place a new piece of knowledge somewhere on a map.

Enhanced Input

Enhanced Input replaced the old InputComponent axis/action mapping system as UE5's standard input

Environment query system

A Behavior Tree decorator can ask "is there a target?" but it can't cheaply ask "which of these fifty

Error diagnostics

fmt's errors arrive in two flavours: a wall of template output at compile time, and a

Executable Targets

A target is the unit of modern CMake. Once addexecutable() (or addlibrary()) creates one,

Expressions and Statements

Expressions produce values; statements perform actions. Understanding the distinction is fundamental to C++ programming.

File sinks

The simplest durable destination โ€” and the one whose failure modes (permissions, unbounded growth,

Filesystem Library

The filesystem library (C++17) provides portable facilities for manipulating files and directories. It replaces platform-specific APIs and C-style file operations with a modern, type-safe interface.

Flush policies

A log line that's still sitting in a buffer when the process dies never existed, as far as anyone

Fold Expressions (C++17)

Fold expressions provide a concise way to apply operators to variadic template parameter packs. They eliminate the need for recursive template patterns.

Format spec syntax

Everything after the : in a replacement field is one small grammar. Learn it once and it applies to

Full Template Specialization

Full specialization provides a completely custom implementation for specific template arguments. It's like saying "for this exact type, use this completely different code."

Function Overloading

Function overloading allows multiple functions with the same name but different parameters. The compiler selects the best match based on arguments.

Function Templates

Function templates let you write one function that works with different types. The compiler generates specific versions for each type you use.

Fundamental Types

C++ provides built-in fundamental types for integers, floating-point numbers, characters, and booleans.

Game instance

GameMode gets destroyed and recreated on every level load; Pawns die and respawn; even

Game mode and game state

AGameModeBase and AGameStateBase look like they should be one class โ€” they're set up together, they

glvalue, prvalue, xvalue

C++11 refined value categories into five types: lvalue, prvalue, xvalue, glvalue, and rvalue. Understanding these enables perfect forwarding and move semantics.

goto and Labels

goto jumps unconditionally to a label in the same function. It exists, it is occasionally the

Headers and Include Mechanism

Headers (.h, .hpp) contain declarations that are shared across multiple source files. The #include directive copies header contents into source files during preprocessing.

History and Philosophy

Boost was born in 1998, the same year the first ISO C++ standard (C++98) was ratified. That timing is

HUD and viewport

AHUD is the older, canvas-based counterpart to UMG: a per-player actor whose job is drawing directly

Inheritance

Inheritance lets you create new classes based on existing ones, reusing code and establishing "is-a" relationships. Derived classes inherit members from base classes and can add new functionality or override existing behavior.

Inline Functions

inline suggests the compiler replace function calls with function body, eliminating call overhead. Modern compilers decide automatically.

Input/Output Streams

The iostream library provides facilities for input/output operations through streams. It's a type-safe, extensible alternative to C's printf/scanf.

Installation and versions

Everything downstream โ€” compile times, IntelliSense accuracy, whether Live Coding works at all โ€”

Installing Boost

There is no single "install Boost" button, and that is mostly fine: because the majority of Boost is

Iterating JSON

Iterating a json container gives you values, never key-value pairs โ€” a design choice inherited

Iterators

Iterators are the glue between containers and algorithms. They provide a uniform interface for traversing and accessing elements in different container types, enabling generic algorithms.

Keywords and Tokens

Tokens are the smallest units of a C++ program. Keywords are reserved words with special meaning that cannot be used as identifiers.

Lambda Expressions

Lambdas (C++11) are anonymous functions that can capture variables from surrounding scope, enabling functional programming patterns and convenient callbacks.

Learning resources

This knowledge base is reference material, not a tutorial โ€” it assumes you're building something and

Library Targets

This page covers creating libraries and attaching their usage requirements (include dirs,

Linking Process

The linker combines multiple object files and libraries into a single executable, resolving symbol references and assigning final memory addresses.

Localization and text

Every piece of text a player reads has to survive translation into other languages without a code change,

Log levels

Levels aren't one filter, they're two: a runtime one that lives per logger (and optionally per sink),

Logger lifecycle

Loggers are shared_ptr-owned. The registry holds one reference, you typically hold another (or

Logging and assertions

Unreal doesn't use C++ exceptions โ€” throwing is disabled across the engine, and Epic's own guidance is

Logical Operators

&&, ||, and ! combine boolean conditions. The detail that matters is short-circuit

Lvalues and Rvalues

Every C++ expression has a type and a value category. Lvalues have persistent storage; rvalues are temporaries.

Makefiles

Makefiles define rules for building projects using the Make build system. They specify dependencies and commands to compile source code incrementally.

Mastery roadmap

This section has 18+ folders behind it by the time it's complete, and none of them are meant to be

Memory Alignment

Data arranged at addresses that are multiples of its size. Required for correctness on some architectures, critical for performance on all.

Memory Model and Allocation

Understanding how C++ programs use memory is fundamental to writing efficient, safe code. Memory is divided into distinct regions with different characteristics and management strategies.

Merging and comparison

"Combine two documents" turns out to mean three different, non-interchangeable operations in this

MetaSounds

MetaSounds replace Sound Cues as UE5's procedural audio graph system. Where a Sound Cue graph runs once

Modules (C++20)

Modules are C++20's replacement for the textual #include model. Instead of the preprocessor

Modules and plugins

A module is the compilation unit; a plugin is the distribution unit. Confusing the two leads to two

Montages and anim notifies

UAnimMontage is how you play a one-off animation โ€” an attack, a reload, a hit react โ€” outside the

Multi-sink loggers

One logger, several destinations โ€” this is the standard shape for a real application: everything to

Multiple Inheritance

Multiple inheritance allows a class to inherit from multiple base classes. This enables combining functionality but introduces complexity, especially the diamond problem.

Name Mangling in C++

Name mangling (name decoration) encodes C++ function signatures into unique symbol names for the linker. This enables function overloading and namespaces while maintaining linkage compatibility.

new and delete Operators

Manual dynamic memory management in C++. Allocates on heap, requires explicit deallocation. Modern C++ prefers smart pointers.

noexcept Specifier

noexcept specifies that a function won't throw exceptions, enabling optimizations and stronger guarantees.

Object Files and Symbols

Object files (.o, .obj) are compiled but not yet linked binary files containing machine code, data, and metadata for the linker.

Object Lifetime

Object lifetime spans from construction to destruction. Understanding lifetime is critical for memory safety, RAII, and avoiding undefined behavior.

Object Slicing

Object slicing occurs when you copy a derived class object to a base class object. The derived parts are "sliced off" and lost.

Operator Overloading

Operator overloading lets your types reuse built-in operator syntax โ€” a + b, v[i], os << x โ€”

Overflow policies

The async queue is bounded, so at some point the producer (your application logging quickly) outruns

Overview of Boost

Boost is a collection of peer-reviewed, portable C++ libraries that sit one layer above the

Overview of C++

A structured reference for modern C++ (C++17/20/23): from the toolchain that turns text into a

Overview of CMake

CMake is a build-system generator: you describe your project once in CMakeLists.txt, and CMake

Overview of fmt

fmt is a fast, type-safe formatting library with Python-style replacement fields โ€” {} holes in a

Overview of spdlog

spdlog is a very fast, header-only-by-default C++ logging library built on top of

Parsing JSON

Parsing is the boundary between untrusted text and typed data. Every way into a json value from

Partial Template Specialization

Partial specialization lets you specialize templates for a pattern of types, not just one specific type. It's like "for all pointer types" or "for all pairs of same types."

Pattern flags

The pattern controls the line around your message โ€” timestamp, level, logger name, thread id โ€” and

Pawn and character

ACharacter is a subclass of APawn, and in practice most projects reach for ACharacter by default

Placement new

Constructs objects in pre-allocated memory without allocating. Separates construction from allocation for custom memory management.

Pointer Arithmetic

Pointer arithmetic navigates contiguous memory with automatic scaling by type size. Essential for arrays but dangerous without bounds checking.

Preprocessing in C++

The preprocessor is a text manipulation tool that runs before compilation. It handles #include, #define, #ifdef, and other directives, producing pure C++ code for the compiler.

Program Structure

C++ programs consist of one or more source files containing declarations, definitions, and the required main() function.

Project anatomy

Knowing which folders in a project are source of truth and which are disposable build output is

Quick start

The default logger exists so that adding logging to a program is one include and one call. Everything

RAII (Resource Acquisition Is Initialization)

RAII is a fundamental C++ idiom where resource lifetime is tied to object lifetime. Resources are acquired in constructors and released in destructors, ensuring automatic cleanup and exception safety.

Ranges Library

Ranges (C++20) is a modern library that provides composable, lazy-evaluated operations on sequences. It replaces traditional iterator pairs with range objects and introduces views for efficient data transformation pipelines.

Raw Pointers

A pointer is a variable that stores a memory address, allowing indirect access to other variables.

Reference Collapsing Rules

When template type deduction creates "reference to reference", C++ applies collapsing rules. This enables perfect forwarding.

References

A reference is an alias - another name for an existing object. Unlike pointers, references cannot be null, must be initialized, and cannot be reseated.

Release checklist

Every topic in this folder โ€” debugging setup, automated tests, config layering, save versioning, packaging,

Remote procedure calls

Replicated properties are good at "this value changed and stays changed." They're the wrong tool for

Rotating and daily sinks

Two different answers to "the log file cannot grow forever": rotate by size whenever the current file

Rule of 0/3/5

These rules tell you which special member functions to define based on your class's resource management needs.

Serialization and dumping

dump() is the inverse of parse() โ€” it turns a json value back into text โ€” and its defaults

Serialization macros

Writing tojson/fromjson by hand for a plain data struct is mostly boilerplate โ€” list the

SFINAE and enable_if

SFINAE (Substitution Failure Is Not An Error) is a fundamental C++ template mechanism that enables conditional template compilation. std::enable_if is the primary tool for applying SFINAE in practice.

Signed and Unsigned Types

Integer types can be signed (negative and positive) or unsigned (only positive). Understanding signedness prevents bugs and overflow issues.

Sink overview

The split of responsibility is deliberate: a logger decides whether to log at all, a sink decides

Slate and widgets in C++

Slate is the immediate-feel, C++-only UI framework that UMG is built on top of. You will rarely write raw

Smart Pointers Overview

Boost.SmartPtr is where modern C++ ownership semantics were invented. Long before std::shared_ptr

Source control setup

Unreal projects mix hand-written C++ with large binary asset files and gigabytes of regenerable

StateTree

StateTree is Epic's newer general-purpose execution graph โ€” a hierarchical state machine that borrows

Static vs Dynamic Linking

Linking can be static (library code copied into executable) or dynamic (library loaded at runtime). Each has trade-offs in size, deployment, and performance.

std::shared_ptr

Smart pointer with shared ownership via reference counting. Multiple shared_ptrs can own the same object, deleted when last owner destroyed.

std::unique_ptr

Smart pointer with exclusive ownership. Zero overhead, automatic cleanup, move-only semantics. The default choice for dynamic memory.

std::weak_ptr

Non-owning observer of shared_ptr-managed objects. Doesn't increase reference count, enables checking if object still exists.

STL Algorithms

STL algorithms are generic functions that work with any container through iterators. They provide tested, optimized implementations of common operations. Never write your own sort or search - use the STL!

STL Containers

Containers store collections of objects. The STL provides optimized, well-tested containers for different access patterns and performance needs. Choose the right container for your use case.

Storage Duration

Storage duration defines when and where objects are created and destroyed. C++ has four storage durations: automatic, static, dynamic, and thread.

Strict Aliasing Rule

Pointers of different types cannot point to the same memory (with exceptions). Enables compiler optimizations but causes undefined behavior when violated.

String Handling

C++ provides std::string_view (C++17) for non-owning string references. Rich API for searching, modifying, and converting text data.

Syslog and platform sinks

When the platform already owns log collection โ€” syslog, the systemd journal, the Windows Event Log โ€”

Template Argument Deduction

Template argument deduction lets the compiler figure out template parameters from function arguments automatically. No need to write func(5) when func(5) works!

The JSON value type

json is one C++ type that behaves like several types at runtime โ€” a tagged union with container

The registry

The registry is a global nameโ†’logger map. It's what makes spdlog::get("db") work from any file in

The SAX interface

DOM parsing โ€” json::parse โ€” builds the entire document in memory before you can look at any of

to_json and from_json

The library never sees your type definitions โ€” it doesn't know what a Person or an Order is.

Traces and overlaps

Line traces, sweeps, and overlaps are how gameplay code asks the world a question โ€” "what's in front of

Translation Units

A translation unit is a single source file plus all its included headers after preprocessing. It's the basic unit of compilation in C++.

Type Traits

Type traits are compile-time tools that query and transform types. They power template metaprogramming and SFINAE, letting you write code that adapts to different types automatically.

UMG fundamentals

UMG (Unreal Motion Graphics) is the widget system almost every UE5 project uses for menus, HUD overlays,

Uniform Initialization

C++11 brace initialization {} - one syntax for all types. Consistent, safe (prevents narrowing), solves gotchas.

Using Boost with CMake

CMake is how most projects consume Boost today. Instead of hand-rolling include paths and -lboost_*

Value Initialization

Explicitly request zero-initialization for fundamentals, default construction for classes. Safer than default initialization.

Variadic Templates

Variadic templates accept any number of arguments of any types. They're the foundation for functions like std::make_tuple, printf, and perfect forwarding.

Versioning and Releases

Boost ships as one coordinated release with one version number, even though it is really ~160

Virtual Functions and vtables

Virtual functions enable runtime polymorphism through dynamic dispatch. Understanding how they work (vtables) helps you understand their cost and use them effectively.

What is Boost?

Boost is a set of free, open-source, peer-reviewed C++ libraries that extend the standard library

What is C++?

C++ is a general-purpose, compiled programming language that extends C with object-oriented,

What is fmt?

C++ had two bad options for turning values into text: printf, which is fast and terse but

What is nlohmann/json?

Before this library, JSON in C++ meant one of two things: a hand-rolled recursive-descent parser

What is spdlog?

For a long time, logging in C++ meant one of two things: hand-rolled iostream chains guarded by

What is Unreal Engine 5?

Unreal Engine 5 (UE5) is not one program โ€” it is an editor, a runtime, and a large tree of C++