Posts
All the articles I've posted.
-
std::generator: Standard Library Coroutine Support
Published:Generate sequences of values on-demand with coroutines
-
C++23's Fold Algorithms
Published:Better folds for a modern language
-
C++23's Deducing this
Published:What it is, why it is, how to use it
-
Abbreviated Function Templates and Constrained Auto
Published:C++20 features for more terse template code
-
Conditionally Trivial Special Member Functions
Published:Why triviality matters and how you can propagate it
-
The Performance Benefits of Final Classes
Published:How the final keyword aids devirtualization and makes your code faster
-
C++20's Conditionally Explicit Constructors
Published:What this feature is, and how it simplifies code
-
Clear, Functional C++ Documentation with Sphinx + Breathe + Doxygen + CMake
Published:Tools and techniques to make your documentation better
-
Guaranteed Copy Elision Does Not Elide Copies
Published:It should be "deferred temporary materialization"
-
Spaceship Operator
Published:C++20's feature for better comparisons
-
Simple Named Boolean Arguments
Published:A handy trick
-
Function Template Partial Ordering: Worked Examples
Published:For deconfounding complex template rules
-
std::accumulate vs. std::reduce
Published:The differences between the two and when you should use them
-
Custom Alias Analysis in LLVM
Published:A lightning overview of building a custom compiler alias analysis pass
-
No More Pointers
Published:This was a joke post, please don't shout at me
-
Do Compilers Take Inline as a Hint?
Published:Do compilers really ignore the inline keyword for optimizations?
-
Passing Overload Sets to Functions
Published:The nightmare of higher-order functions plus overloading
-
A Call for Data on Exceptions
Published:Are exceptions really expensive?
-
Functional Exceptionless Error Handling with Optional and Expected
Published:How std::optional and std::expected can improve our error handling code
-
Meeting C++ 2017 Trip Report
Published:My first trip to Meeting C++
-
Detection Idiom: A Stopgap for Concepts
Published:How C++20 concepts will make our lives better, and how the detection idiom gets us part way there
-
Learning C++
Published:Tips and resources
-
void C::C::C::A::A::A::foo(): Valid Syntax Monstrosity
Published:Please don't write this code
-
Writing a Linux Debugger Part 10: Advanced Topics
Published:Future work for those suitably brave
-
Writing a Linux Debugger Part 9: Handling Variables
Published:Adding support reading variables to the debugger
-
C++17 attributes: maybe_unused, fallthrough and nodiscard
Published:New attributes in C++17 and how they can help you
-
Metaclasses for Embedded Domain Specific Languages
Published:How metaclasses could be used to generate code for languages embedded in C++
-
Writing a Linux Debugger Part 8: Stack Unwinding
Published:Adding support for backtraces
-
Writing a Linux Debugger Part 7: Source-Level Breakpoints
Published:Adding support for setting breakpoints on lines of source code and functions
-
Accelerating your C++ on the GPU with SYCL
Published:Writing code targeting heterogeneous processors from standard C++
-
Writing a Linux Debugger Part 6: Source-Level Stepping
Published:Adding step over, out, and in support to the debugger
-
ACCUConf 2017 Trip Report
Published:How I got on at my first conference
-
ACCUConf 2017 Workshop Day Report
Published:My introduction to Chapel
-
Writing a Linux Debugger Part 5: Source and Signals
Published:Implementing source-level DWARF primitives and printing out source context
-
Writing a Linux Debugger Part 4: Elves and Dwarfs
Published:Implementing reading and writing from and to registers and memory
-
Writing a Linux Debugger Part 3: Registers and Memory
Published:Implementing reading and writing from and to registers and memory
-
Writing a Linux Debugger Part 2: Breakpoints
Published:Implementing breakpoints in the debugger
-
Writing a Linux Debugger Part 1: Setup
Published:Beginning the journey of writing a Linux debugger
-
Building my First Custom Keyboard
Published:Custom layout, custom plates, hand-wired
-
Initialization in C++ is Bonkers
Published:Just absurd
-
Template Argument Deduction for Class Template Constructors
Published:How to use class template argument deduction in C++17
-
Lazy Generators: Template Deduction on the Left-Hand Side
Published:Deducing template arguments based on assignment context
-
Simplifying Templates and #ifdefs with if constexpr
Published:Making your code simpler and more maintainable
-
Type Erasure with Unified Call Syntax
Published:Supporting member and non-member call syntax while bridging compile time and run time
-
Exploding Tuples with Fold Expressions
Published:Iterating over tuples without the pain
-
Selective Default Template Arguments
Published:Several options for ergonomic templates with many default arguments
-
Declaring Classes in Function Declarations
Published:You can do this, but don't
-
The Effect of a try-catch-rethrow
Published:A subtle way in which try-catch-rethrow blocks are not equivalent to standard blocks
-
integral_variable: A compile-time assignable variable
Published:Metaprogramming horrors
-
Adding C++17 Structured Bindings Support to Your Classes
Published:How you can destructure your own custom classes in an ergonomic way
-
Stack and Heap: Commonly Misused Terms
Published:Why many uses of these terms are inaccurate and confusing, and what you should use instead
-
std::generator: Standard Library Coroutine Support
Generate sequences of values on-demand with coroutines
-
C++23's Fold Algorithms
Better folds for a modern language
-
C++23's Deducing this
What it is, why it is, how to use it
-
Abbreviated Function Templates and Constrained Auto
C++20 features for more terse template code
-
Conditionally Trivial Special Member Functions
Why triviality matters and how you can propagate it
-
The Performance Benefits of Final Classes
How the final keyword aids devirtualization and makes your code faster
-
C++20's Conditionally Explicit Constructors
What this feature is, and how it simplifies code
-
Clear, Functional C++ Documentation with Sphinx + Breathe + Doxygen + CMake
Tools and techniques to make your documentation better
-
Guaranteed Copy Elision Does Not Elide Copies
It should be "deferred temporary materialization"
-
Spaceship Operator
C++20's feature for better comparisons
-
Simple Named Boolean Arguments
A handy trick
-
Function Template Partial Ordering: Worked Examples
For deconfounding complex template rules
-
std::accumulate vs. std::reduce
The differences between the two and when you should use them
-
Custom Alias Analysis in LLVM
A lightning overview of building a custom compiler alias analysis pass
-
No More Pointers
This was a joke post, please don't shout at me
-
Do Compilers Take Inline as a Hint?
Do compilers really ignore the inline keyword for optimizations?
-
Passing Overload Sets to Functions
The nightmare of higher-order functions plus overloading
-
A Call for Data on Exceptions
Are exceptions really expensive?
-
Functional Exceptionless Error Handling with Optional and Expected
How std::optional and std::expected can improve our error handling code
-
Meeting C++ 2017 Trip Report
My first trip to Meeting C++
-
Detection Idiom: A Stopgap for Concepts
How C++20 concepts will make our lives better, and how the detection idiom gets us part way there
-
Learning C++
Tips and resources
-
void C::C::C::A::A::A::foo(): Valid Syntax Monstrosity
Please don't write this code
-
Writing a Linux Debugger Part 10: Advanced Topics
Future work for those suitably brave
-
Writing a Linux Debugger Part 9: Handling Variables
Adding support reading variables to the debugger
-
C++17 attributes: maybe_unused, fallthrough and nodiscard
New attributes in C++17 and how they can help you
-
Metaclasses for Embedded Domain Specific Languages
How metaclasses could be used to generate code for languages embedded in C++
-
Writing a Linux Debugger Part 8: Stack Unwinding
Adding support for backtraces
-
Writing a Linux Debugger Part 7: Source-Level Breakpoints
Adding support for setting breakpoints on lines of source code and functions
-
Accelerating your C++ on the GPU with SYCL
Writing code targeting heterogeneous processors from standard C++
-
Writing a Linux Debugger Part 6: Source-Level Stepping
Adding step over, out, and in support to the debugger
-
ACCUConf 2017 Trip Report
How I got on at my first conference
-
ACCUConf 2017 Workshop Day Report
My introduction to Chapel
-
Writing a Linux Debugger Part 5: Source and Signals
Implementing source-level DWARF primitives and printing out source context
-
Writing a Linux Debugger Part 4: Elves and Dwarfs
Implementing reading and writing from and to registers and memory
-
Writing a Linux Debugger Part 3: Registers and Memory
Implementing reading and writing from and to registers and memory
-
Writing a Linux Debugger Part 2: Breakpoints
Implementing breakpoints in the debugger
-
Writing a Linux Debugger Part 1: Setup
Beginning the journey of writing a Linux debugger
-
Building my First Custom Keyboard
Custom layout, custom plates, hand-wired
-
Initialization in C++ is Bonkers
Just absurd
-
Template Argument Deduction for Class Template Constructors
How to use class template argument deduction in C++17
-
Lazy Generators: Template Deduction on the Left-Hand Side
Deducing template arguments based on assignment context
-
Simplifying Templates and #ifdefs with if constexpr
Making your code simpler and more maintainable
-
Type Erasure with Unified Call Syntax
Supporting member and non-member call syntax while bridging compile time and run time
-
Exploding Tuples with Fold Expressions
Iterating over tuples without the pain
-
Selective Default Template Arguments
Several options for ergonomic templates with many default arguments
-
Declaring Classes in Function Declarations
You can do this, but don't
-
The Effect of a try-catch-rethrow
A subtle way in which try-catch-rethrow blocks are not equivalent to standard blocks
-
integral_variable: A compile-time assignable variable
Metaprogramming horrors
-
Adding C++17 Structured Bindings Support to Your Classes
How you can destructure your own custom classes in an ergonomic way
-
Stack and Heap: Commonly Misused Terms
Why many uses of these terms are inaccurate and confusing, and what you should use instead