<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Braden++</title>
    <link>https://blog.ganets.ky/</link>
    <language>en-us</language>
    <copyright>Copyright © Braden Ganetsky 2023-2026</copyright>
    <description>Braden Ganetsky&apos;s blog</description>
    <lastBuildDate>Sun, 18 Oct 2026 17:26:36 +0000</lastBuildDate>
    <atom:link href="https://blog.ganets.ky/feed.xml" rel="self" type="application/rss+xml"/>

    
      
      <item>
        <title>I can&apos;t use generic lambdas at compile-time, now what?</title>
        
          <category>tok3n</category>
        
          <category>k3tchup</category>
        
        <link>https://blog.ganets.ky/ClangGenericLambdas/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/ClangGenericLambdas/</guid>
        <pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate>
        <description>This is a direct follow-up to my previous article, “Break MSVC and Clang with this one weird trick!”. In that article, I showed a solution for the problem in MSVC, but the problem in Clang seemed a lot more involved.As of the time of writing, the problem in Clang still hasn’t been fixed, although...</description>
        
      </item>
      
    
      
      <item>
        <title>Break MSVC and Clang with this one weird trick!</title>
        
          <category>tok3n</category>
        
          <category>k3tchup</category>
        
        <link>https://blog.ganets.ky/BreakMsvcAndClang/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/BreakMsvcAndClang/</guid>
        <pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate>
        <description>A few weeks ago I came across some code that MSVC and Clang both rejected, but GCC accepted. The error messages are different in MSVC and Clang, so clearly I must have done something wrong, and GCC falsely accepts the code, right? I mostly minimized the code, and ended up with this. (Compiler Exp...</description>
        
      </item>
      
    
      
      <item>
        <title>I wrote a GitHub Action to select an MSVC version</title>
        
          <category>misc</category>
        
        <link>https://blog.ganets.ky/MsvcGha/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/MsvcGha/</guid>
        <pubDate>Sun, 28 Dec 2025 00:00:00 +0000</pubDate>
        <description>Alright, I’m not breaking new ground here, but this is a difficulty I’ve had, and maybe it’s a difficulty you’ve had too. It’s not common, but if you want to compile your code with a particular version of MSVC, it’s already fairly finicky on your own machine. It’s even worse with GitHub Actions, ...</description>
        
      </item>
      
    
      
      <item>
        <title>buffalo::buffalo::buffalo...</title>
        
          <category>misc</category>
        
        <link>https://blog.ganets.ky/Buffalo/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/Buffalo/</guid>
        <pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate>
        <description>This is a quick post about something I can’t get out of my head.This came up in a “hallway track” at CppCon 2025 last month, as a spin-off of a conversation about Clang’s -Wdtor-name error. The following is real code that actually compiles.struct buffalo {    buffalo();};buffalo::buffalo::buffalo...</description>
        
      </item>
      
    
      
      <item>
        <title>How to use the libc++ GDB pretty-printers</title>
        
          <category>pretty-print</category>
        
        <link>https://blog.ganets.ky/LibcxxPrettyPrinters/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/LibcxxPrettyPrinters/</guid>
        <pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate>
        <description>Last year I wrote an article about my attempt so far at a system for testing Natvis files automatically. Here, I wanted to write the equivalent article but for GDB pretty-printers, for which I have an earlier article. As I said in the Natvis testing article:  I want the CI to fail if I accidental...</description>
        
      </item>
      
    
      
      <item>
        <title>How and why to std::forward inside a concept</title>
        
          <category>misc</category>
        
        <link>https://blog.ganets.ky/ForwardInConcept/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/ForwardInConcept/</guid>
        <pubDate>Sat, 04 Jan 2025 00:00:00 +0000</pubDate>
        <description>I thought I had a solid understanding of how std::forward works, but it turns out I was wrong. In a concept definition where I originally used std::forward, it turned out to give the incorrect behaviour. It seems like std::forward should only be used in cases of type deduction, but I was using it...</description>
        
      </item>
      
    
      
      <item>
        <title>I want to write automated Natvis testing</title>
        
          <category>boost</category>
        
          <category>natvis</category>
        
        <link>https://blog.ganets.ky/NatvisTesting/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/NatvisTesting/</guid>
        <pubDate>Sun, 13 Oct 2024 00:00:00 +0000</pubDate>
        <description>Since writing the Natvis visualizers for Boost.Unordered, I’ve been thinking about how to test them. So far, I’ve only written semi-automatic testing. Run the “visualizer_tests.cpp” file in Visual Studio, break on the label called “break_here”, then inspect the Locals window. Since I already set ...</description>
        
      </item>
      
    
      
      <item>
        <title>A single-function SFINAE-friendly std::apply</title>
        
          <category>misc</category>
        
        <link>https://blog.ganets.ky/SfinaeApply/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/SfinaeApply/</guid>
        <pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate>
        <description>There’s this issue I’ve had when using std::apply, and I’m sure if you’ve written enough generic code, then you’ve experienced it too. If not, don’t worry, I’ll go through it fully. As specified in the standard, you can’t check whether a call to std::apply is semantically valid at compile-time. T...</description>
        
      </item>
      
    
      
      <item>
        <title>Visualizing boost::unordered_map in GDB, with pretty-printer customization points</title>
        
          <category>boost</category>
        
          <category>pretty-print</category>
        
        <link>https://blog.ganets.ky/PrettyPrinter/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/PrettyPrinter/</guid>
        <pubDate>Fri, 16 Aug 2024 00:00:00 +0000</pubDate>
        <description>This article is about my experience implementing GDB pretty-printers for the Boost.Unordered containers. You can read my related pair of articles on the Visual Studio natvis implementation here and here.Importantly, in this article I’ll outline the techniques I used so that users can inject their...</description>
        
      </item>
      
    
      
      <item>
        <title>Natvis for boost::concurrent_flat_map, and why fancy pointers are hard</title>
        
          <category>boost</category>
        
          <category>natvis</category>
        
        <link>https://blog.ganets.ky/NatvisForUnordered2/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/NatvisForUnordered2/</guid>
        <pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate>
        <description>This is the 2nd article about my experience implementing custom visualizations for the Boost.Unordered containers in the Visual Studio Natvis framework. You can read the 1st article here.This 2nd article is about the open-addressing containers, which all have shared internals. These are the boost...</description>
        
      </item>
      
    
      
      <item>
        <title>Natvis for boost::unordered_map, and how to use &amp;lt;Intrinsic&amp;gt; elements</title>
        
          <category>boost</category>
        
          <category>natvis</category>
        
        <link>https://blog.ganets.ky/NatvisForUnordered/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/NatvisForUnordered/</guid>
        <pubDate>Sun, 02 Jun 2024 00:00:00 +0000</pubDate>
        <description>Recently I’ve been working on implementing custom visualizations for the Boost.Unordered containers in the Visual Studio Natvis framework, to provide an identical debugging experience in the Boost.Unordered containers to what we get for the STL containers. Here is the file.This has been a tricky ...</description>
        
      </item>
      
    
      
      <item>
        <title>The Parser concept (+ NoneOf and AllOf)</title>
        
          <category>tok3n</category>
        
        <link>https://blog.ganets.ky/ParserConcept/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/ParserConcept/</guid>
        <pubDate>Thu, 27 Jul 2023 00:00:00 +0000</pubDate>
        <description>Continuing on my series on my expression template parser generator library…So far I’ve defined the AnyOf parser, that checks whether the first character of the input string matches any characters from a given set. This is one of my “primitive” parsers. I’ve thought of 2 other “primitives” to act ...</description>
        
      </item>
      
    
      
      <item>
        <title>My first compiler bug</title>
        
          <category>tok3n</category>
        
        <link>https://blog.ganets.ky/FirstCompilerBug/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/FirstCompilerBug/</guid>
        <pubDate>Thu, 08 Jun 2023 00:00:00 +0000</pubDate>
        <description>I talked about this in a lightning talk at C++Now 2023. I want to go into more detail here.It’s exciting in a masochistic way I guess. A sort of self-schadenfreude. Somehow I found a bug in a major compiler! Frustrating for my workflow obviously, but it feels like a compliment, in a strange way.L...</description>
        
      </item>
      
    
      
      <item>
        <title>One char at a time</title>
        
          <category>tok3n</category>
        
        <link>https://blog.ganets.ky/AnyOf/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/AnyOf/</guid>
        <pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate>
        <description>Last time I had a brief explanation of the library I want to design. I want to create parser combinators using expression templates, where all information is in the parser types themselves, with no data members.Writing this library has been a hugely enjoyable experience. I’m sure I’ll find flaws ...</description>
        
      </item>
      
    
      
      <item>
        <title>A string literal as a template argument</title>
        
          <category>tok3n</category>
        
        <link>https://blog.ganets.ky/StaticString/</link>
        <guid isPermaLink="true">https://blog.ganets.ky/StaticString/</guid>
        <pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate>
        <description>But first, a preambleThis is my backstory before the recipe in this metaphorical cookbook.I was first introduced to the idea of parser combinators in a CppCon talk not about parser combinators, at least not as the main feature. Ben Deane and Jason Turner’s famous “constexpr ALL the Things!” talk ...</description>
        
      </item>
      
    

  </channel>
</rss>
