RSS.Social

foonathan::blog()

follow: @[email protected]

Posts

Trip Report: Fall ISO C++ Meeting in Wrocław, Poland

if constexpr requires requires { requires }

Trip Report: Summer ISO C++ Meeting in St. Louis, USA

Trip Report: C++Now 2024

Trip Report: Spring ISO C++ Meeting in Tokyo, Japan

I'm the new assistant chair of SG 9, the study group for std::ranges!

C++ needs undefined behavior, but maybe less

Compile-time sizes for range adaptors

The new static constexpr std::integral_constant idiom

Should we stop writing functions?

Constrain your user-defined conversions

Trip report: Summer ISO C++ Meeting in Varna, Bulgaria

Technique: Proof types to ensure preconditions

New integer types I'd like to see

malloc() and free() are a bad API

Carbon's most exciting feature is its calling convention

Tutorial: Preparing libraries for CMake FetchContent

Technique: Recursive variants and boxes

`saturating_add` vs. `saturating_int` -- new function vs. new type?

Technique: Compile Time Code Generation and Optimization

I accidentally wrote a Turing-complete parsing library

Tutorial: the CRTP Interface Technique

C++20 concepts are structural: What, why, and how to change it?

Tutorial: Interactive code snippets with Hugo and Compiler Explorer

Implementation Challenge: Lossless, compact parse tree with iterative traversal

Trivially copyable does not mean trivially copy constructible

What is the unit of a text column number?

Tricks with Default Template Arguments

`constexpr` is a Platform

Technique: Immediately-Invoked Function Expression for Metaprogramming

Implementation Challenge: Replacing std::move and std::forward

Nifty Fold Expression Tricks

Tutorial: C++20's Iterator Sentinels

std::polymorphic_value + Duck Typing = Type Erasure

Naming Things: Implementer vs. User Names

Standardese Documentation Generator: Post Mortem and My Open-Source Future

Tutorial: When to Write Which Special Member

Nested Optionals, Expected and Composition

Inline Namespaces 101

Tutorial: Managing Compiler Warnings with CMake

Proposals to Fix the Spaceship Operator

Mathematics behind Comparison #5: Ordering Algorithms

Mathematics behind Comparison #4: Three-Way Comparison

Mathematics behind Comparison #3: Ordering Relations in C++

Mathematics behind Comparison #2: Ordering Relations in Math

Let's Talk about std::optional<T&> and optional references

Mathematics behind Comparison #1: Equality and Equivalence Relations

A (Better) Taxonomy of Pointers

optional<T> in Containers Ⅱ — Not All std::vector Usages Are The Same

Should You Put optional<T> in a Container?

Guidelines For Rvalue References In APIs

Flexible issue management with Trello and IFTTT

Guidelines for constructor and cast design

Implementation Challenge: Revisiting the visitor pattern

Exceptions vs expected: Let's find a compromise

What should be part of the C++ standard library?

Write explicit constructors - but what about assignment?

Thoughts on destructive move

Operator precedence is broken

Lazy evaluation of function arguments in C++

Prefer nonmember, nonfriends?

The year is 2017 - Is the preprocessor still needed in C++?

cppast - A library to parse and work with the C++ AST

std::string_view accepting temporaries: good idea or horrible pitfall?

Implementation Challenge flag_set: Type-safe, hard to misuse bitmask

Implementing a tuple_iterator

The problem with policy-based design

Implementing function_view is harder than you might think

How to handle errors in constructors without exceptions?

My take on variant

Tutorial: Conditionally disabling non-template functions

Fixing std::initializer_list<T>

standardese documentation generator version 0.3: Groups, inline documentation, template mode & more

Memory 0.6: Composition and Joint Allocators

Function templates - deduce template arguments or pass explicitly?

void foo(T& out) - How to fix output parameters

Tutorial: Emulating strong/opaque typedefs in C++

Type safe - Zero overhead utilities for more type safety

Prevent precondition errors with the C++ type system

How do I implement assertions?

Implementation Challenge: Concepts in C++14

Choosing the right error handling strategy

Move Semantics and Default Constructors -- Rule of Six?

Standardese documentation generator version 0.2: Entity linking, index generation & more

Move Safety -- Know What Can Be Done in the Moved-From State

Tutorial: Easy dependency management for C++ with CMake and Git

Flexible error handling techniques in C++

Standardese documentation generator version 0.1

You (probably) do want `final` classes?

You (probably) don't want `final` classes

Issue driven development

Standardese - a (work-in-progress) nextgen Doxygen

How I have beaten Boost.Pool #4: About abstractions and algorithms

How I have beaten Boost.Pool #3: Branches are bad

(Awesome?) Allocator Additions - Thoughts regarding allocator proposals

How I have beaten Boost.Pool #2: Inlining is key

How I have beaten Boost.Pool #1: Introduction and profiling results

Performing arbitrary calculations with the Concept TS

Tutorial: Easily supporting CMake install and find_package()

Memory 0.5: Better build system, Low-level Allocators, BlockAllocator & Your Feedback is needed

Implementation Challenge: A count leading zeroes function

One of C++ most underrated features: Namespace aliases

Implementation Challenge: Traits for Concepts with optional functionality

Controlling overload resolution #4: SFINAE

Controlling overload resolution #3: Tag dispatching

Controlling overload resolution #2: Improving error messages for failed overload resolution

Controlling overload resolution #1: Preventing implicit conversions

AllocatorAwareContainer: Introduction and pitfalls of propagate_on_container_XXX defaults

Memory 0.4: Polishing, Error handling, Storage, Traits, Documentation and more