The Curious Engineer

All blogs / C++

Arthur O’Dwyer

quuxplusone.github.io/blog

Stuff mostly about C++

C++MathEssays / personal

Posts
686 from 13 Mar 2018 to 17 Oct 2026
Posting
weekly (49 in the last year)
Kind
personal blog
Feed
https://quuxplusone.github.io/blog/feed.xml

2026 39

  1. _Paradise Lost_, diffed
  2. Is a sized random-access range always common?
  3. Recursive `make` and `-j`
  4. Spelling the type of a “self” parameter with Reflection
  5. Color Wheel combinatorics
  6. Tennyson and Babbage? No! Trevelyan
  7. Data members that want to use `size()`
  8. Colourfields
  9. Möbius-strip crosswords
  10. Kinton Ford’s _Canto I_
  11. How old is Ann?
  12. A crosswording miscellany (2026-07-28)
  13. Interconverting std::function with copyable_function (2026-07-26)
  14. Egerton MS 1995 (2026-07-16)
  15. Some recent discoveries (2026-07-01)
  16. Katakana and Cypriot (2026-06-12)
  17. C++26 Reflection gives us universal template parameters (2026-06-07)
  18. Branchless sorting of trivially relocatable types (2026-06-05)
  19. Does bulk memmove speed up std::remove_if? (No.) (2026-05-23)
  20. The Book of St Albans (1486) (2026-05-22)
  21. std::is_heap could be faster (2026-05-11)
  22. Two-Minute Iolanthe (2026-05-08)
  23. C++ Alignment Chart (2026-05-06)
  24. ELF’s ways to combine potentially non-unique objects (2026-05-05)
  25. Adventure: Is there light in the cobble crawl? (2026-04-30)
  26. Adventure: Walking on the ceiling (2026-04-28)
  27. Things C++26 define_static_array can’t do (2026-04-24)
  28. auto{x} != auto(x) (2026-04-11)
  29. The “macro overloading” idiom (2026-04-02)
  30. Seven Types of Ambiguity (1930) (2026-03-19)
  31. Chromium’s span-over-initializer-list success story (2026-03-19)
  32. MSVC’s /experimental:constevalVfuncNoVtable is non-conforming (2026-03-12)
  33. A dialogue on trivial-abi and trivially relocatable (2026-03-02)
  34. What I’m reading lately: Graves on caves (2026-02-15)
  35. has_unique_object_representations versus __is_trivially_equality_comparable (2026-02-14)
  36. KenKen with Roman numerals (2026-02-10)
  37. Mysteries of the map, partly answered (2026-01-19)
  38. Divergence in instantiating unused functions of unevaluated lambdas (2026-01-17)
  39. Sirius XM’s AI call center gives good deals (2026-01-03)

2025 50

  1. What I watched and read this year (2025-12-31)
  2. LONG0751: Mysteries of Donovan’s map (2025-12-30)
  3. LONG0751 has been found! (2025-12-29)
  4. map::operator[] should be nodiscard (2025-12-18)
  5. Recent miscellany: 1D glider, flags, stripes, and telephony (2025-12-07)
  6. Two kinds of tag types: foo_t and foo_tag (2025-12-03)
  7. When should a =delete’d constructor be explicit? (2025-11-24)
  8. Picked shrimps (2025-11-22)
  9. How my papers did at Kona (2025-11-18)
  10. Thoughts on P3858R0 restart_lifetime<T> (2025-10-18)
  11. The C++26 NB comments have arrived (2025-10-12)
  12. Implicit operator bool participates in comparison (2025-10-10)
  13. What breaks without implicit T*-to-bool conversion? (2025-10-05)
  14. Bill and Ted’s Godot: It’s awful (2025-09-25)
  15. PSA: views::single doesn’t really view (2025-09-16)
  16. Parallel epigrams in Borges and Butler (2025-09-09)
  17. A poem all in dactylic noun substantives, part 3 (2025-09-06)
  18. A poem all in dactylic noun substantives, part 2 (2025-08-30)
  19. A poem all in dactylic noun substantives, part 1 (2025-08-28)
  20. Counting polybar polyominoes (2025-08-23)
  21. Whenever a library clause uses CTAD or list-initialization, it’s wrong (2025-08-22)
  22. Varaldo’s Shahrazad and Chiti’s Centunesimo Canto (2025-08-11)
  23. On the art of correcting manuscripts, etc. (2025-08-03)
  24. True names matter in C++ (2025-08-01)
  25. D. C. Phillips’ The Promised One (1915) (2025-07-17)
  26. Explainable Minesweeper and solvable nonograms (2025-07-06)
  27. Animating moving juggling patterns (2025-06-22)
  28. Winning 4x4x4 tic-tac-toe by consulting an oracle (2025-06-02)
  29. Array member-initializers in GCC (2025-05-27)
  30. Wordle-like games require two word lists (2025-05-23)
  31. Pernicious Rumor and “falling” stars (2025-05-11)
  32. Non-constexpr Optional and trivial relocation (2025-05-09)
  33. Constexpr Optional and trivial relocation (2025-05-08)
  34. Type-erasure, trivial relocation, and lethal sirens (2025-05-01)
  35. Names of the tetrominoes (2025-04-19)
  36. Phrase origin: Why do we “call” functions? (2025-04-04)
  37. Essays on Modern C++ released (2025-03-30)
  38. Constexpr factors_of (2025-03-14)
  39. NYPL Musical of the Month (2025-03-10)
  40. Grab bag: Spartan sayings, Jack Pointey (2025-03-01)
  41. Both sides of the shield (2025-02-28)
  42. Better diagnostics through operator-precedence parsing (2025-02-27)
  43. How my papers did at Hagenberg (2025-02-18)
  44. Like (2025-02-09)
  45. Dante’s hypersphere in THREE.js (2025-02-02)
  46. The crossword from Bored to Death S2E5 (2025-01-28)
  47. “Trivially relocatable” versus “trivially destructible after move” (2025-01-10)
  48. Semantically ordered arguments, round 2 (2025-01-05)
  49. Fully Schrödinger crosswords (2025-01-03)
  50. Does v.clear() free the allocation? (2025-01-02)

2024 53

  1. What I watched and read this year (2024-12-31)
  2. “Cumbersome” labeled loops and the C preprocessor (2024-12-22)
  3. Labeled loop syntax in many languages (2024-12-20)
  4. Field-testing -Wassign-to-class-rvalue (2024-12-13)
  5. When ranges::for_each behaves differently from for (2024-12-09)
  6. std::expected should be nodiscard (2024-12-08)
  7. The Elements of Programming Style (1974) (2024-11-27)
  8. Shifting objects by less than sizeof(T) (2024-11-08)
  9. Wolf (1906) on the false Quijotes of Avellaneda and Lesage (2024-11-02)
  10. Martin Gardner Scientific American Index; Rule 110 challenge (2024-10-21)
  11. What I’m reading lately: Greppability, Hebb’s dictum (2024-10-15)
  12. Why don’t compilers warn for const T f()? (2024-10-07)
  13. Playing A Serf’s Tale (1986) (2024-09-30)
  14. The red right arm of Jove (2024-09-09)
  15. Nash equilibria in Ballmer’s binary-search interview game (2024-09-04)
  16. The little bird attacks the snake (2024-08-26)
  17. Boost.Interprocess, and sg14::inplace_vector (2024-08-23)
  18. Andries Brouwer on the OOM killer (2024-08-22)
  19. noexcept affects libstdc++’s unordered_set (2024-08-16)
  20. Make things simpler than possible (2024-08-04)
  21. Counting distinct n-state DFAs (2024-07-27)
  22. Why can’t I specialize std::hash inside my own namespace? (2024-07-15)
  23. A priority_tag-like pattern for type-based metaprogramming (2024-07-07)
  24. std::try_cast and (const&&)=delete (2024-07-03)
  25. How my papers did at St Louis (2024-06-30)
  26. How the STL uses explicit (2024-06-25)
  27. Because Internet (2019) (2024-06-19)
  28. Who uses P2786 and P1144 for trivial relocation? (2024-06-15)
  29. Tangent circles of integer radius (2024-06-10)
  30. Topsys & Turvys (1893) (2024-05-23)
  31. Types that falsely advertise P2786 trivial relocatability (2024-05-18)
  32. Types that falsely advertise trivial copyability (2024-05-15)
  33. Using Wikipedia’s API to find inconsistently hyphenated French names (2024-05-04)
  34. Reverse the List of Integers (2024-04-22)
  35. A case study in not-quite-move-semantic library design (2024-04-18)
  36. Name lookup in multiple base classes (2024-04-17)
  37. Help wanted: Compile your codebase with P1144 and P2786 relocatability! (2024-04-10)
  38. The Mummy! (1827) (2024-04-08)
  39. Johnson’s definition of network (2024-04-05)
  40. Trivial, but not trivially default constructible (2024-04-02)
  41. Ed Catmur’s Triliteral esolang (2024-03-31)
  42. Some St. Patrick’s Day math (2024-03-17)
  43. The 2024 Google Summer of Code idea lists are out (2024-03-05)
  44. The algebraic structure of Infinite Craft (2024-03-03)
  45. Sorting at compile time, part 2 (2024-02-20)
  46. Sorting integer_sequence at compile time (2024-02-19)
  47. Feature requests for the Auto macro (2024-02-14)
  48. Infinite Craft (2024-02-08)
  49. A note on feature-test macros (2024-02-06)
  50. Fun with “deducing this” lambdas (2024-01-23)
  51. Pentoprimality (2024-01-15)
  52. What I’m reading lately: Africa, liberty, economics (2024-01-12)
  53. Should assignment affect is_trivially_relocatable? (2024-01-02)

2023 66

  1. Acorns and honey in the Golden Age (2023-12-26)
  2. Holiday puzzle: Anagrams modulo two (2023-12-24)
  3. Two kinds of function template parameters (2023-12-17)
  4. Moving via relocate-and-construct (2023-12-06)
  5. A Dissertation Upon Roast Pig (1822) (2023-11-20)
  6. How to type-pun via catching by non-const reference (2023-11-17)
  7. How my papers did at Kona (2023-11-12)
  8. Guard nouns or guard verbs? (2023-11-11)
  9. Map of NYC Michelin stars, 2023 (2023-11-08)
  10. My muscle-memory git toolbox (2023-10-30)
  11. Happy 109th birthday, Martin Gardner! (2023-10-21)
  12. Quuxplusone/SG14 now has inplace_vector (2023-10-20)
  13. Origins and purposes (2023-10-18)
  14. constexpr std::string update (2023-10-13)
  15. How boost::is_base_of matches private and/or ambiguous bases (2023-10-06)
  16. R.I.P. The OFloinn (2023-10-03)
  17. A neat technique for custom output iterators (2023-10-01)
  18. Succession joke chyrons (2023-09-26)
  19. Blog roundup: U+, Bloomfield, Stuka, Gino (2023-09-16)
  20. Just how constexpr is C++20’s std::string? (2023-09-08)
  21. Some C++20 ranges aren’t const-iterable (2023-08-13)
  22. The style guide must say how to do what you mustn’t do (2023-08-11)
  23. Fun with quadratic pack-expansions (2023-08-05)
  24. Kotlin AssertJ cheat sheet (2023-07-28)
  25. Socrates on why there’s no erase_if for span (2023-07-16)
  26. How “static storage for initializers” did at Varna (2023-07-05)
  27. What I’m reading lately: Dogs and Wolfe (2023-07-01)
  28. Space-filling polycube snakes (2023-06-27)
  29. Polymorphic types aren’t trivially relocatable (2023-06-24)
  30. PSA: Value-initialization is not merely default-construction (2023-06-22)
  31. A small C++ meme dump (2023-06-17)
  32. Themistocles and Alexander (2023-06-07)
  33. Make operator<=> ignore a data member (2023-06-05)
  34. P1144 PMR koans (2023-06-03)
  35. A not-so-quick introduction to the C++ allocator model (2023-06-02)
  36. Don’t forward things that aren’t forwarding references (2023-05-27)
  37. A deduction guide for Foo(Ts..., Ts...) (2023-05-26)
  38. Triangular Tetris (2023-05-19)
  39. Implementation divergence with a moved-from set comparator (2023-05-10)
  40. Polymorphic types and -Wdeprecated-copy-dtor (2023-05-05)
  41. Fun with flat_map’s non-explicit constructors (2023-04-28)
  42. std::format from scratch, part 3 (2023-04-23)
  43. std::format from scratch, part 2 (2023-04-22)
  44. std::format from scratch, part 1 (2023-04-21)
  45. Trivial functions can still be non-nothrow (modulo compiler bugs) (2023-04-17)
  46. Most C++ constructors should be explicit (2023-04-08)
  47. Escheresque parquet deformations of an aperiodic monotile (2023-03-30)
  48. Mathematical golf (2023-03-23)
  49. The epitaph of Adrian’s horse (2023-03-22)
  50. Iterating and inverting a const views::filter (2023-03-13)
  51. Should the compiler sometimes reject a [[trivially_relocatable]] warrant? (2023-03-10)
  52. Computing OEIS A360447 (2023-03-05)
  53. Update on my trivial swap prize offer (2023-03-04)
  54. STL algorithms for trivial relocation (2023-03-03)
  55. Making priority_queue and flat_set work with move-only types (2023-03-01)
  56. Trivial relocation, std::swap, and a $2000 prize (2023-02-24)
  57. -Ought words (2023-02-20)
  58. How my papers did at Issaquah (2023-02-17)
  59. The jargon treadmill (2023-02-04)
  60. Simple C++20 input and output iterators (2023-01-27)
  61. Always read the first error message first (2023-01-21)
  62. P1967 #embed and D2752 “Static storage for initializer_list” are now on Compiler Explorer (2023-01-13)
  63. Happy birthday, Donald Knuth! and lamp-trolls (2023-01-10)
  64. In search of Adventure ]I[ (1981-ish) (2023-01-09)
  65. Pangrams and Scrabblegrams (2023-01-02)
  66. Milner’s lamp (2023-01-01)

2022 57

  1. Hash-colliding string literals on MSVC (2022-12-31)
  2. Benchmarking Clang’s -fbuiltin-std-forward (2022-12-24)
  3. API design advice from Anakin and Obi-Wan (2022-12-17)
  4. Copy semantics, per Plato’s Sophist (2022-12-15)
  5. Replacing std::lock_guard with a factory function (2022-12-14)
  6. Lego polycube snakes (2022-12-11)
  7. Polyomino strips, snakes, and ouroboroi (2022-12-08)
  8. Techniques for post-facto multiple inheritance (2022-12-01)
  9. Polycube snakes and ouroboroi (2022-11-18)
  10. The game of Zendo (2022-11-13)
  11. What I’m reading lately: tunnel edition (2022-11-12)
  12. Refactoring with =delete (2022-11-11)
  13. Bit-vector manipulations in standard C++ (2022-11-05)
  14. Style Invitational Week 1509: Two-Reelers (2022-11-03)
  15. Map of NYC Michelin stars, 2022 (2022-10-25)
  16. Issachar Styrke’s Alcestis Burlesqued (2022-10-24)
  17. Notes on Sonia Greene’s Alcestis (2022-10-23)
  18. Sonia Greene’s Alcestis (2022-10-22)
  19. Prefer core-language features over library facilities (2022-10-16)
  20. Thoughts on -Wctad-maybe-unsupported (2022-10-07)
  21. A “pick two” triangle for std::vector (2022-09-30)
  22. What I’m reading lately: Borges, Jung, Hitchcock (2022-09-24)
  23. The game of Lielow (2022-09-02)
  24. What is the “vector pessimization”? (2022-08-26)
  25. Playing The Search for Almazar (1981) (2022-08-13)
  26. Beware CTAD on reverse_iterator (2022-08-02)
  27. Type-erased InplaceUniquePrintable benefits from noexcept (2022-07-30)
  28. What I’m reading lately: Scholar’s Stage, Popper, Grug (2022-07-26)
  29. Google Timer is dead; long live BigTimer (2022-07-25)
  30. Fun with lifetime-extended results of assignment (2022-07-09)
  31. An example where inline constexpr makes a difference (2022-07-08)
  32. void versus [[noreturn]] (2022-06-29)
  33. unordered_multiset’s API affects its big-O (2022-06-23)
  34. Three Men Discuss Relativity (1926) (2022-06-17)
  35. C++20’s parenthesized aggregate initialization has some downsides (2022-06-03)
  36. Blessed nuns fret not at their narrow rooms (2022-05-23)
  37. Heavy Planet (2022-05-22)
  38. std::relocate’s implementation is cute (2022-05-18)
  39. Two more musings on Clang diagnostics (2022-05-05)
  40. To enable ADL, add a using-declaration (2022-04-30)
  41. The humble potato (2022-04-25)
  42. PSA: ADL requires that unqualified lookup has found a function (2022-04-14)
  43. Larson wine limericks (2022-03-30)
  44. Kafka, math jokes, triangle dissection (2022-03-24)
  45. TIL: nullopt_t is not equality-comparable, but monostate is (2022-03-07)
  46. History of non-standard-layout class layouts (2022-03-04)
  47. What if vector<T>::iterator were just T*? (2022-03-03)
  48. Evirdle (2022-02-27)
  49. Birdle (2022-02-20)
  50. “Universal reference” or “forwarding reference”? (2022-02-02)
  51. A minimally interesting typo-bug (2022-01-29)
  52. volatile means it really happens (2022-01-28)
  53. const all the things? (2022-01-23)
  54. The economist’s $100 bill, and the virtue of consistency (2022-01-20)
  55. The best engineering interview question I’ve ever gotten, Part 2 (2022-01-07)
  56. The best engineering interview question I’ve ever gotten, Part 1 (2022-01-06)
  57. Test an expression for constexpr-friendliness (2022-01-04)

2021 78

  1. Completeness preconditions considered harmful (2021-12-27)
  2. I sweded the LLVM Bugzilla migration (2021-12-11)
  3. A note on namespace __cpo (2021-12-07)
  4. view_interface types are boolean-testable (2021-12-06)
  5. Underseeding mt19937; introducing xoshiro256ss (2021-11-23)
  6. Is path convertible to string_view?: a war story (2021-11-21)
  7. A footnote on “Three reasons to pass std::string_view by value” (2021-11-19)
  8. Cryptic poems, Mahabharata, means of production (2021-11-18)
  9. Image rotation by shifting pixels (2021-11-13)
  10. Image rotation by three affine transformations (2021-11-26)
  11. Three reasons to pass std::string_view by value (2021-11-09)
  12. The Fourth Dimension and the Bible (1922) (2021-11-05)
  13. C++ Pub Quiz at CppCon 2021, Game Two (2021-10-29)
  14. Overload arrangement puzzles (2021-10-29)
  15. C++ Pub Quiz at CppCon 2021, Game One (2021-10-28)
  16. Don’t reopen namespace std (2021-10-27)
  17. operator<=> doesn’t obsolete the hidden friend idiom (2021-10-22)
  18. Back to Basics at CppCon 2021 (2021-10-21)
  19. Rolling 2d6 with playing cards (2021-10-21)
  20. Book Review: Fedor Pikus’ The Art of Writing Efficient Programs (2021-10-19)
  21. What =delete means (2021-10-17)
  22. Lineup for next week’s Celebration of Mind (2021-10-16)
  23. Evasive Maneuvers (1994) (2021-10-08)
  24. A macro for migrating to static operator() (2021-10-07)
  25. std::span should have a converting constructor from initializer_list (2021-10-03)
  26. The peasants are revolting (2021-09-30)
  27. A class without a copy constructor (2021-09-17)
  28. A compile-time benchmark for enable_if and requires, part 2 (2021-09-14)
  29. Bit patterns of float (2021-09-05)
  30. A compile-time benchmark for enable_if and requires (2021-09-04)
  31. Two old crosswords of mine (2021-08-24)
  32. Two counterintuitive results (2021-08-12)
  33. Field-testing P2266 “Simpler Implicit Move” (2021-08-07)
  34. Don’t explicitly instantiate std templates (2021-08-06)
  35. Perfect forwarding call wrappers need =delete (2021-07-30)
  36. Buddhabrot (2021-07-27)
  37. Cratylus on choosing good names (2021-07-15)
  38. An iterator IS-NOT-A const_iterator (2021-07-14)
  39. priority_tag for ad-hoc tag dispatch (2021-07-09)
  40. Implementation divergence on swapping bools within vectors (2021-06-27)
  41. Another requires-clause syntax pitfall (2021-06-09)
  42. Tag dispatch versus concept overloading (2021-06-07)
  43. A Night of Serious Drinking and operationalism (2021-06-04)
  44. C++ On Sea 2021 schedule announced (2021-05-27)
  45. Overly interoperable libraries, part 3 (2021-05-26)
  46. The Fishspear priority queue algorithm (2021-05-23)
  47. Overly interoperable libraries, part 2 (2021-05-22)
  48. A metaprogramming puzzle: Overly interoperable libraries (2021-05-19)
  49. “Modern STL Programming” at C++ On Sea 2021 (2021-05-17)
  50. Play The Search for Almazar online (2021-05-16)
  51. Nifty notebooks, and Almazar (2021-05-13)
  52. An interview with Arthur O’Dwyer (2021-05-11)
  53. Removing an empty base class can break ABI (2021-05-07)
  54. Semantically ordered arguments should be lexically ordered too (2021-05-05)
  55. P2266’s interaction with decltype(auto) (2021-05-04)
  56. Optimizing string::append is harder than it looks (2021-04-17)
  57. Lineup for next week’s Celebration of Mind (2021-04-15)
  58. Antisocial Homeworlds, and a solitaire challenge (2021-04-04)
  59. static constexpr unsigned long is C++’s “lovely little old French whittling knife” (2021-04-03)
  60. Observations on Castlequest’s code (2021-03-21)
  61. Playing Castlequest (1980), Part 2 (2021-03-20)
  62. Playing Castlequest (1980), Part 1 (2021-03-19)
  63. Does throw x implicit-move? Let’s ask SFINAE (2021-03-18)
  64. C’s removal of gets could have been done better (2021-03-12)
  65. Making Castlequest compilable (2021-03-11)
  66. Castlequest exhumed! (2021-03-09)
  67. Escape analysis hates copy elision (2021-03-07)
  68. Don’t blindly prefer emplace_back to push_back (2021-03-03)
  69. Adventure 448 (SWEN0448): All the easter eggs (2021-02-27)
  70. When your loop unroller works harder than your infinite loop detector (2021-02-26)
  71. Homeworlds: Analysis of an Opening Gambit (2021-02-21)
  72. A hole in Clang’s -Wsuggest-override (2021-02-19)
  73. When can the C++ compiler devirtualize a call? (2021-02-15)
  74. Blog roundup: Auftragstaktik, files, lesser-known cryptocurrencies (2021-02-13)
  75. decltype of a non-static member (2021-02-10)
  76. What are X-macros? (2021-02-01)
  77. Fun with conversion-operator name lookup (2021-01-13)
  78. It’s not always obvious when tail-call optimization is allowed (2021-01-09)

2020 96

  1. The Box of Delights (2020-12-27)
  2. Thoughts on “Does GPT-2 Know Your Phone Number?” (2020-12-27)
  3. A better 404 polyglot (2020-12-23)
  4. How do C++ using-directives work? (2020-12-21)
  5. The STL is more than std::accumulate (2020-12-14)
  6. Bubblesort, rocksort, and cocktail-shaker sort (2020-12-13)
  7. Tips re operator() (2020-12-12)
  8. An example of the Barton–Nackman trick (2020-12-09)
  9. “Flash of unstyled base class” (2020-12-09)
  10. How to use a private member from outside the class (2020-12-03)
  11. Loop variable may not be declared static (2020-12-03)
  12. How different compilers deal with provably unused entities (2020-12-02)
  13. Arrays aren’t pointers (2020-11-25)
  14. Type-erased UniquePrintable and PrintableRef (2020-11-24)
  15. Flavors of Base64 encoding (2020-11-17)
  16. Lifetime extension applies to whole objects (2020-11-16)
  17. Some thoughts on U.S. politics (2020-11-05)
  18. SFINAE and E1.E2 (2020-11-01)
  19. Colonel Blimp and An Inspector Calls (2020-11-01)
  20. while (auto x=y; z) (2020-10-28)
  21. Homeworlds Puzzle: Mercury in Retrograde (2020-10-28)
  22. Homeworlds Puzzle: Burnt Umber (2020-10-25)
  23. std::once_flag is a glass hill (2020-10-23)
  24. Scott Kim’s rotational ambigrams for the Celebration of Mind (2020-10-18)
  25. Thoughts on OEIS A125508 (2020-10-18)
  26. Conway’s Soldiers (2020-10-17)
  27. Site reliability engineering at Ardeer; eyewitnesses to Hiroshima (2020-10-17)
  28. A case study in implementation inheritance (2020-10-15)
  29. Left-folding and right-folding an arbitrary callable (2020-10-12)
  30. Grab bag (2020-10-12)
  31. A very short war story on too much overloading (2020-10-11)
  32. Inheritance is for sharing an interface (and so is overloading) (2020-10-09)
  33. Solo-player rules for Colossal Cave: The Board Game (2020-10-02)
  34. Classically polymorphic visit replaces some uses of dynamic_cast (2020-09-29)
  35. September blog roundup (2020-09-26)
  36. Why do I get a linker error with static const and value_or? (2020-09-19)
  37. C++ Pub Quiz at CppCon 2020, Game Two (2020-09-18)
  38. C++ Pub Quiz at CppCon 2020, Game One (2020-09-16)
  39. “Classic STL” at CppCon 2020 (2020-09-12)
  40. For what inputs is std::sort unstable? (2020-09-11)
  41. Two musings on the design of compiler warnings (2020-09-02)
  42. -Wrange-loop-bind-reference and auto&& (2020-08-26)
  43. Phantoms vs Phantoms (Geister) (2020-08-22)
  44. MathJax v3 in Jekyll (2020-08-19)
  45. What I’m reading lately: New York, The Atlantic, The Three-Body Problem (2020-08-15)
  46. Back to Basics at CppCon 2020 (2020-08-11)
  47. Concepts can’t do quantifiers (2020-08-10)
  48. The “array size constant” antipattern (2020-08-06)
  49. What I’m reading lately: The Ring of Words (2020-08-05)
  50. An obvious guideline on function-call style (2020-07-23)
  51. A Parody on Iolanthe (2020-07-20)
  52. What is the std::swap two-step? (2020-07-11)
  53. How to erase from an STL container (2020-07-08)
  54. What I’m reading lately: ACOUP, Kitbashed, the Atlantic (2020-07-06)
  55. Decompiling GOET0580 (2020-06-30)
  56. The Star Wars cellular automaton (2020-06-29)
  57. Homeworlds Puzzle: The Prestige (2020-06-16)
  58. Lovecraft on Hitler (2020-06-09)
  59. Homeworlds Puzzle: War Games (2020-05-30)
  60. The Case of Willie the Wisp (2020-05-29)
  61. Homeworlds Puzzle: Mini Doomsday Machine (2020-05-29)
  62. The “OO” Antipattern (2020-05-28)
  63. Folding over operator= (2020-05-07)
  64. C++Now 2020: A C++ Magic Trick (2020-05-04)
  65. Connect Fifteen (2020-05-03)
  66. Default function arguments are the devil (2020-04-18)
  67. Precedence of a proposed |> operator (2020-04-10)
  68. Hello Muddah, Hello Faddah (Coronavirus Version) (2020-04-08)
  69. What I’m reading lately: The Compleat Boucher (2020-04-05)
  70. A seasonal followup to “When is *x also &x?” (2020-04-01)
  71. When is *x also &x? (2020-03-31)
  72. Discrete Peaceful Encampments, Bernie Sanders version (2020-03-21)
  73. c_str-correctness (2020-03-20)
  74. Ways C++ prevents you from doing X (2020-03-17)
  75. The Tau Manifesto (2020-03-14)
  76. Contra char *argv[] (2020-03-12)
  77. The Design of Everyday Things (2020-03-07)
  78. Thoughts on “The C++ Rvalue Lifetime Disaster” (2020-03-04)
  79. Field-testing “Down with lifetime extension!” (2020-03-04)
  80. The abstraction penalty for wide integer math on x86-64 (2020-02-13)
  81. How to replace __FILE__ with source_location in a logging macro (2020-02-12)
  82. Two approaches to secret sharing: math vs. blockchain (2020-02-12)
  83. “Myths about /dev/urandom” and “What Is JavaScript Made Of?” (2020-02-09)
  84. A bug in Adventure’s endgame (2020-02-06)
  85. SFINAE special members or support incomplete types: Pick at most one (2020-02-05)
  86. OpenSSL client and server from scratch, part 5 (2020-01-28)
  87. OpenSSL client and server from scratch, part 4 (2020-01-27)
  88. OpenSSL client and server from scratch, part 3 (2020-01-26)
  89. OpenSSL client and server from scratch, part 2 (2020-01-25)
  90. OpenSSL client and server from scratch, part 1 (2020-01-24)
  91. Hidden reinterpret_casts (2020-01-22)
  92. Canonicalizing {0,1}-matrices with Nauty (2020-01-11)
  93. A quirk of qualified member lookup (2020-01-11)
  94. Wolves and Sheep, with tables (2020-01-10)
  95. Namespaces are for preventing name collisions (2020-01-07)
  96. The Story of Mel (2020-01-05)

2019 107

  1. Comparative TMP #1: MPL, Mp11, Kvasir, Hana, Metal (2019-12-28)
  2. Holiday fun with template<class> and template<typename> (2019-12-27)
  3. De Canibus Britannicis (2019-12-17)
  4. Implementation divergence with const int i; and mutable (2019-12-04)
  5. Setup and teardown routines in non-flat class hierarchies (2019-12-03)
  6. Sorrows and So You Want to Be a Wizard (2019-11-30)
  7. Slack’s new WYSIWYG input box is really terrible (2019-11-20)
  8. Throwback Saturday: Three variants on 2048 (2019-11-16)
  9. How to build LLVM from source, monorepo version (2019-11-09)
  10. Hello World with C++2a modules (2019-11-07)
  11. PSA: <random>’s distributions are stateful (2019-10-22)
  12. CppCon 2019 talks are up (2019-10-18)
  13. Discrete Peaceful Encampments, with tables (2019-10-18)
  14. An unexpected brush with “strong typedefs” (2019-10-10)
  15. Why doesn’t C++ have networking support? (2019-10-09)
  16. What is the virtual table table? (2019-09-30)
  17. ADL can interfere even with uglified names (2019-09-26)
  18. Thoughts on Herb Sutter’s CppCon keynote (2019-09-24)
  19. C++ Pub Quiz at CppCon 2019 (2019-09-21)
  20. A trivially copyable ticket for a unique_ptr (2019-09-21)
  21. Seen on the CppCon whiteboard (2019-09-18)
  22. Back to Basics at CppCon 2019 (2019-09-12)
  23. Implementation divergence with friend (2019-09-10)
  24. Transcription of All Of Them Witches (2019-08-26)
  25. Church booleans in Befunge-98 (2019-08-24)
  26. Self-assignment and the Rule of Zero (2019-08-20)
  27. The post-Cologne mailing is out (2019-08-18)
  28. Dragonflight, and running DosBox in the browser (2019-08-11)
  29. Mangling dependent parameter types, or, what happened to std::default_order (2019-08-08)
  30. Confessions of a Justified Sinner (2019-08-06)
  31. A C++ acronym glossary (2019-08-02)
  32. What is 8÷2(2+2)? (2019-08-01)
  33. A cellular automaton that makes beautiful little patterns (2019-07-27)
  34. Making floppy disk images under OS X (2019-07-26)
  35. Prince Rupert’s Lego Cube (2019-07-23)
  36. Notes on Prince Rupert’s Problem (2019-07-22)
  37. Concept definition-checking and its woes (2019-07-22)
  38. What I’m reading lately (2019-07-19)
  39. C++2a Coroutines and dangling references (2019-07-10)
  40. Conditional explicit is not the same thing as forwarding explicit (2019-07-05)
  41. Enums break strong structural equality (2019-07-04)
  42. P1616R0 and health insurance (2019-07-03)
  43. Announcing Quuxplusone/coro, single-header C++2a example code (2019-07-03)
  44. C++Now video tidbits (2019-07-02)
  45. Contra P0339 “polymorphic_allocator<> as a vocabulary type” (2019-07-02)
  46. In support of P1485 “Better keywords for coroutines” (2019-06-26)
  47. My C++Now 2019 talks are captioned (2019-06-25)
  48. “The STL From Scratch” is back! (2019-06-21)
  49. “Exception Handling: A False Sense of Security” (2019-06-17)
  50. Dealing with Dragons (2019-06-09)
  51. “Understanding Real-World Concurrency Bugs in Go” (2019-06-06)
  52. MapView can be faster than MapRef (2019-05-27)
  53. A faster WG21 CWG issue browser (2019-05-22)
  54. MSVC can’t handle move-only exception types (2019-05-11)
  55. On function_ref and string_view (2019-05-10)
  56. Befunge and Flobnar (2019-05-02)
  57. The wit of Macaulay, who wrote of Frederick II (2019-04-29)
  58. What is ADL? (2019-04-26)
  59. This one weird trick for customization by class template (partial) specialization (2019-04-26)
  60. Puzzle: Wolves and sheep (2019-04-17)
  61. Fork considered harmful; paint splatters considered Perl (2019-04-13)
  62. How hana::type<T> “disables ADL” (2019-04-09)
  63. ADL insanity (2019-04-08)
  64. Booth bits; modern cuisine (2019-03-28)
  65. The space of design choices for std::function (2019-03-27)
  66. Map of NYC Michelin stars, 2019 (2019-03-26)
  67. How my papers did at Kona (2019-03-20)
  68. What is Type Erasure? (2019-03-18)
  69. README for my Peaceful Encampments visualizer (2019-03-18)
  70. RFM: Request for mashups (2019-03-17)
  71. Value category is not lifetime (2019-03-11)
  72. PSA: shared_ptr<T>() is not make_shared<T>() (2019-03-06)
  73. Four versions of Eric’s Famous Pythagorean Triples Code (2019-03-06)
  74. Is __int128 integral? A survey (2019-02-28)
  75. Thoughts on P1306 “Expansion Statements” (2019-02-28)
  76. Fetishizing class invariants (2019-02-24)
  77. Not variadic expression templates (2019-02-23)
  78. P1144 case study: Moving a fixed_capacity_vector (2019-02-22)
  79. What library types are trivially_relocatable in practice? (2019-02-20)
  80. The Knightmare of Initialization in C++ (2019-02-18)
  81. compressed_vector_traits (2019-02-16)
  82. Quick and unscientific trivially_relocatable benchmark (2019-02-12)
  83. Packs of packs (2019-02-11)
  84. shared_ptr(&w, _1) (2019-02-06)
  85. C++ idiom of the day: arrow_proxy (2019-02-06)
  86. Hot takes on P1452, P1470, P0408, and P0843 (2019-02-03)
  87. On teaching Unicode in C++ (2019-02-03)
  88. Contra P0429R6 flat_map (2019-01-29)
  89. Hot takes on flat_map, resize_default_init, and ranges::to (2019-01-28)
  90. Colossal Cave Adventure: open world challenge (2019-01-28)
  91. nodiscard philosophies (2019-01-25)
  92. Discrete Peaceful Encampments (2019-01-24)
  93. Peaceful Encampments, round 2 (2019-01-21)
  94. Pointer comparisons with std::less<void>: a horror story (2019-01-20)
  95. Covariance and contravariance in C++ (2019-01-20)
  96. requires-expression grammar trivia (2019-01-17)
  97. Is this std::vector? (2019-01-17)
  98. Measuring adoption of C++17 and CTAD in real codebases (2019-01-16)
  99. On choosing the exact right terminology (2019-01-15)
  100. Why do we require requires requires? (2019-01-15)
  101. Les Fleurs de Tarbes (2019-01-14)
  102. The blow-up problem (2019-01-14)
  103. Happy birthday, Donald Knuth! and Peaceful Encampments (2019-01-10)
  104. 37 percent of HyperRogue’s compilation time is due to std::function (2019-01-06)
  105. Booth on Cassio (2019-01-05)
  106. const is a contract (2019-01-03)
  107. Should foo be move-only? (2019-01-02)

2018 140

  1. for (auto&& elt : range) Still Always Works (2018-12-27)
  2. Against the Grain: Contraception, abortion, and slow death (2018-12-26)
  3. Against the Grain: Pitcher plant (2018-12-25)
  4. Fictional islands that are neither fictional nor islands (2018-12-16)
  5. for (auto&& elt : range) Always Works (2018-12-15)
  6. Don’t inherit from standard types (2018-12-11)
  7. Contra CTAD (2018-12-09)
  8. Don’t put -Weverything in your build flags (2018-12-06)
  9. Pitfalls and decision points in implementing const_iterator (2018-12-01)
  10. Remember the ifstream (2018-11-26)
  11. How DNS got so complicated (2018-11-20)
  12. Meta-sudoku, round 4: A valid meta-puzzle (2018-11-20)
  13. “Counterfactual mugging” a.k.a. “charity” (2018-11-19)
  14. Meta-sudoku, round 3: D’oh! (2018-11-19)
  15. Meta-sudoku, round 2 (2018-11-18)
  16. Execution-agent-local storage (2018-11-14)
  17. Callee-destroy versus caller-destroy parameter lifetimes (2018-11-12)
  18. [[trivially_relocatable]] in San Diego: call for reader feedback (2018-11-11)
  19. An argument pro liberal use of [[nodiscard]] (2018-11-06)
  20. WG21: Avoid creating ADL situations on functions with semi-common names (2018-11-04)
  21. Cheaply relocatable, but not trivially relocatable (2018-10-26)
  22. C++2a idioms for library feature detection (2018-10-26)
  23. Puzzle: Sudoku Stories (2018-10-26)
  24. I won’t be in San Diego (2018-10-20)
  25. The “Red Clause” (2018-10-05)
  26. Trivially Relocatable FAQ (2018-10-04)
  27. Trivially Relocatable versus Destructive Movable (2018-09-28)
  28. Pray-Mister-Babbage problems (2018-09-26)
  29. “Perfect backwarding” (2018-09-25)
  30. Concepts as door-opening robots (2018-09-24)
  31. A simpler SUBSUMES() macro (2018-09-23)
  32. A use-case for member concepts and/or template concept parameters (2018-09-17)
  33. Data race when catching by non-const reference (2018-09-16)
  34. Homeworlds: The Yellowbird Mistake, Part II (2018-09-15)
  35. Homeworlds: The Yellowbird Mistake (2018-09-10)
  36. Constrained forwarding references considered sketchy as frick (2018-09-09)
  37. The big problems for C++11 SFINAE (2018-09-08)
  38. The Mysteries of London (2018-09-05)
  39. make_range and reversed (2018-08-29)
  40. C++ doesn’t know how to do customization points that aren’t operators (2018-08-23)
  41. Stopping the cascade of errors (2018-08-23)
  42. Exploring C++ types with puts(__PRETTY_FUNCTION__) (2018-08-22)
  43. mutable and “trivially fooable” (2018-08-19)
  44. Fixing ADL, Round 2 (2018-08-14)
  45. Field-testing Herb Sutter’s Modest Proposal to Fix ADL (2018-08-13)
  46. The Auto macro (2018-08-11)
  47. Comparison categories for narrow-contract comparators (2018-08-07)
  48. The FORCE_CONSTEXPR macro (2018-08-07)
  49. Quantum Computing for the Determined (2018-08-05)
  50. MathJax in Jekyll (2018-08-05)
  51. Case study: Making std::any trivially relocatable (2018-08-02)
  52. The Three Impostors: Four-ale and six-ale (2018-07-26)
  53. Godspell and Max Havelaar (2018-07-23)
  54. Template metaprogramming: Iteration is better than recursion (2018-07-23)
  55. Announcing “trivially relocatable” (2018-07-18)
  56. What does the Standard mean by “_traits”? (2018-07-14)
  57. If English was written like Chinese (2018-07-13)
  58. When is a trivially copyable object not trivially copyable? (2018-07-13)
  59. operator auto (2018-07-12)
  60. Renowned author Dan Brown; London’s Gold-Mines (2018-07-10)
  61. Roll for member functions (2018-07-09)
  62. SCARY metafunctions (2018-07-09)
  63. C++ quiz of the day (2018-07-08)
  64. Defaulted destructor inhibits move (2018-07-07)
  65. Portia’s Caskets, Explained (2018-07-06)
  66. Thoughts on “sanely move-assignable” (2018-07-06)
  67. Assume a spherical politician (2018-07-04)
  68. Trivially-constructible-from (2018-07-03)
  69. CppCon 2018 Early Bird Registration closes on July 7th (2018-07-02)
  70. Broken Koans (2018-06-30)
  71. Trivially swappable (2018-06-29)
  72. The surprisingly high cost of static-lifetime constructors (2018-06-26)
  73. shields.io (2018-06-26)
  74. “We were defeated by one thing only—” (2018-06-22)
  75. Madame Scarron (2018-06-22)
  76. Is your constructor an object-factory or a type-conversion? (2018-06-21)
  77. ’Ware Wire (2018-06-20)
  78. The Fundamental Theorem of Software Engineering (2018-06-18)
  79. inplace_foo versus fixed_capacity_foo (2018-06-18)
  80. Avoid ADL calls to functions with common names (2018-06-17)
  81. Which in your case you have not got (2018-06-17)
  82. My C++Now 2018 talks are captioned (2018-06-13)
  83. Attribute noexcept_verify (2018-06-12)
  84. Perennial impossibilities of C++ (2018-06-12)
  85. Pointer to raw memory? T*. (2018-06-08)
  86. has_no_padding_bits (2018-06-08)
  87. Stone Soup (2018-06-06)
  88. <memory_resource> for libc++ (2018-06-05)
  89. My C++Now 2018 talks are up (2018-06-04)
  90. Setting errno in operator T (2018-06-01)
  91. Rubens tube (2018-05-30)
  92. View types with metadata cause problems (2018-05-30)
  93. Thoughts on Concepts, P0745, and P1079 (2018-05-28)
  94. In praise of make_unique (2018-05-26)
  95. Great Deploy Plans of History: Time Zones (2018-05-21)
  96. Superconstructing super elider, round 2 (2018-05-17)
  97. Contra implicit declarations of struct types (2018-05-16)
  98. The Ignorable Attributes Rule (2018-05-15)
  99. Puzzle: Policing Squaresville (2018-05-10)
  100. Default-constructibility is overrated (2018-05-10)
  101. A pro-default-constructibility experiment from 2007 (2018-05-10)
  102. Hiding template parameters from casual users (2018-05-09)
  103. [[trivial_abi]] 101 (2018-05-02)
  104. Happy birthday, Don Woods (2018-04-30)
  105. Contra locales (2018-04-30)
  106. Embedding quotes in strings (2018-04-27)
  107. std::priority_queue is missing an operation (2018-04-27)
  108. WG21 and the National Popular Vote Compact (2018-04-26)
  109. The Lakos Rule (2018-04-25)
  110. Downsides of omitting trivial destructor calls (2018-04-17)
  111. How to build LLVM from source (2018-04-16)
  112. Contra built-in library types (2018-04-15)
  113. Chinese fonts, and METAFONT (2018-04-15)
  114. Copy Elision in Throw Statements (2018-04-09)
  115. A modest proposal for a GCC diagnostic (2018-04-09)
  116. Hanabi set-packing puzzle (2018-04-09)
  117. The Description of a New World, Called The Blazing-World (1666) (2018-04-05)
  118. On lifetime extension and decltype(auto) (2018-04-05)
  119. The Demagogue in Politics (2018-04-03)
  120. Use-cases for false_v (2018-04-02)
  121. The Superconstructing Super Elider (2018-03-29)
  122. Hat-game strategies in Hanabi (2018-03-29)
  123. Parameter-only types, Round 2 (2018-03-28)
  124. std::string_view is a parameter-only type (2018-03-27)
  125. Johnny Eck in Tarzan Escapes (2018-03-24)
  126. Namespaces for UDLs (2018-03-21)
  127. This should exist: Markov music for radio lacunae (2018-03-21)
  128. P0732R0 and “trivially comparable” (2018-03-19)
  129. The C++Now 2018 schedule is out (2018-03-19)
  130. Customization point design for library functions (2018-03-19)
  131. Happy Saint Patrick’s Day! (2018-03-17)
  132. Async/await, and coloring schemes in general (2018-03-16)
  133. Zoological case naming (2018-03-16)
  134. West const (2018-03-15)
  135. On raise versus throw, and the Mandela Effect (2018-03-14)
  136. Hot take: P0947R0 “Another take on Modules” (2018-03-14)
  137. First post — Jekyll Now (2018-03-13)
  138. The “unsigned for value range” antipattern (2018-03-13)
  139. Using future_error for control flow (2018-03-13)
  140. Providentissimus Deus (2018-03-13)