This period
2026-09-09 → 2026-10-09 · rolling 30 daysArticles
51 this periodIf one anti-malware software is good, does that make two better?
This article discusses the complications that arise when two different anti-malware programs are installed on the same system, leading to conflicts and potential system failures. It uses an analogy of security companies to illustrate the issues of software detours and interactions.
C++ and AI at CppCon: We have to use agents - more or less?!
This article discusses the intersection of C++ and artificial intelligence, particularly in the context of the CppCon conference. It explores the necessity of using agents in AI applications developed with C++.
How can undefined opcodes ud0 and ud1 have parameters? How undefined were they?
This article discusses the nature of undefined opcodes ud0 and ud1, explaining how they can have parameters despite being undefined. It delves into the intricacies of instruction decoding and the historical context of these opcodes.
Why does the compiler sometimes use ud2 and sometimes int 3 for code that shouldn’t execute?
This article explains the differences between the int 3 and ud2 opcodes used by x86 compilers to indicate unreachable code. It discusses their purposes and implications for debugging.
If somebody tries to hot-patch an already-hot-patched function, how do they avoid conflicts?
This article discusses the challenges of hot-patching functions in Windows, particularly when a function has already been patched. It highlights the potential issues that arise when unauthorized patching occurs and the implications for system stability.
The complement of true is true, except when it's false
Archive Search About The complement of true is true, except when it's false 1 October 2026 · Matthew Taylor | Edit Table of Contents Putting it together When it’s false Unscoped enums, promotion, and undefined behaviour Avoiding this in…
Why is there no Windows hot-patching support for other architectures like 32-bit ARM and MIPS?
This article discusses the reasons behind the lack of Windows hot-patching support for certain architectures such as 32-bit ARM and MIPS. It explains the historical context and the specific features of Windows Server that influenced this decision.
Windows on Itanium also provided for hot-patching, in an even simpler way
This article discusses the hot-patching capabilities of Windows on Itanium, highlighting the fixed-sized instruction bundles and their implications for hot-patching. It also touches on the structure of Itanium binaries and the use of padding in function definitions.
C++26: the new debugging header
This article discusses the new debugging header introduced in C++26, detailing its features and usage. It provides insights into how this addition can improve debugging practices in C++ development.
EDG C/C++ Compiler Project
Sign in Appearance settings Platform AI CODE CREATION GitHub Copilot Write better code with AI GitHub Copilot app Direct agents from issue to merge MCP Registry Integrate external tools DEVELOPER WORKFLOWS Actions Automate any workflow…
Windows on AArch64 also provides for hot-patching, but it’s much simpler than on x86
This article discusses how Windows on AArch64 implements hot-patching with simpler mechanics compared to x86 due to its fixed-length instruction set. It explains the use of patch points and the atomicity of instruction updates.
As a general rule, calling product support while drunk is not recommended
This article recounts a humorous story from a retired Microsoft product support colleague about a drunken customer seeking help with a Java applet on a fan site for Van Halen. The interaction highlights the challenges of providing support under unusual circumstances.
C++ reminder: Function-local static variables are initialized only once, even if it looks like they get initialized multiple times
This article explains the behavior of function-local static variables in C++, emphasizing that they are initialized only once at the first point of declaration. Subsequent accesses retain the variable's value without reinitialization.
Using C++17 std::optional
This article describes std::optional, a helper type added in C++17 that can either contain a value or be empty. It discusses its usefulness and how it enhances type safety and expressiveness in C++ programming.
Writing Efficient C++ Code
This article was originally published in Polish in issue 4/2013 (11) of Programista magazine. Although high-level languages—scripting, interpreted, or running in a virtual machine—have many advantages and are the best choice for numerous…
Debugging walkthrough: Access violation on nonsense instruction, episode 3
This article discusses a case of access violations occurring across multiple unrelated programs, analyzing crash dumps to identify the underlying issue. It highlights the importance of recognizing invalid code execution in debugging.
Visual Studio Code CMake Tools 1.24
CMake Tools 1.24 includes several reliability fixes and productivity improvements, allowing users to run tests from the editor and manage source-file lists more effectively.
No, really, you need to pass all unhandled messages to DefWindowProc, part 2
This article discusses a reported memory leak in Windows related to the RegisterDragDrop and RevokeDragDrop calls. It emphasizes the importance of passing unhandled messages to DefWindowProc to ensure proper cleanup.
Trip report: CppCon 2026
This article provides a detailed account of the author's experiences and insights gained during CppCon 2026, highlighting key sessions and discussions.
When working with Win32 FILETIME, don’t forget that you have std::chrono now
This article discusses how to simplify the calculation of time differences using std::chrono in C++ instead of manually handling FILETIME. It highlights the benefits of using modern C++ libraries for better code clarity and efficiency.
A brief history of Windows scroll bar shortcuts
This article discusses the evolution of scroll bar shortcuts in Windows, highlighting the introduction of a right-click menu and the Shift + click shortcut for easier navigation. It reflects on the decline of Win32 scroll bars in favor of custom implementations in modern frameworks.
Faster C++ code intelligence for Copilot CLI with Whole Codebase Indexing
This article discusses the improvements in C++ code intelligence for GitHub Copilot CLI through Whole Codebase Indexing, which enhances navigation and symbol searching in large repositories.
D2300R11: `std::execution`
This paper proposes a self-contained design for a Standard C++ framework for managing asynchronous execution on generic execution resources. It is based on the ideas in A Unified Executors Proposal for C++ and its companion papers. Today…
What’s the highest legal FILETIME? Is it safe to use?
This article discusses the challenges of defining a sentinel FILETIME value that is always considered later than any other FILETIME. It explores the implications of using maximum values and the special meanings associated with certain FILETIME values in various functions.
What’s the highest legal FILETIME? Is it safe to use?
This article discusses the challenges of defining a sentinel FILETIME value that is always considered later than another FILETIME. It explores the implications of using maximum values and the special meanings associated with certain FILETIME values.
Comparing exception behavior of magic statics, std::call_once, and std::async
This article discusses the differences in exception handling between magic statics, std::call_once, and std::async in C++. It explains how each mechanism behaves when an exception occurs during initialization or execution.
Comparing exception behavior of magic statics, std::call_once, and std::async
This article discusses the differences in exception handling between magic statics, std::call_once, and std::async in C++. It explains how each mechanism behaves when an exception occurs during initialization or execution.
OpenLoco version 26.09
OpenLoco v26.09 is out! We have a huge number of new Open Graphics objects this month as part of our North American Expansion work. On the game side of things, we have added drag dimension tooltips and improved our Linux support, as well…
The C++20’s u8/char8_t Backward-Compatibility Fiasco
Giovanni Dicanio's Programming Corner on the Internet There is a myth according to which every new C++ version is backward compatible with the older versions. While there is a common general trend to try and keep backward compatibility…
bonobomock: A GoogleTest-compatible C++ mocking library
Sign in Appearance settings Platform AI CODE CREATION GitHub Copilot Write better code with AI GitHub Copilot app Direct agents from issue to merge MCP Registry Integrate external tools DEVELOPER WORKFLOWS Actions Automate any workflow…
std::call_once vs. std::async
This article discusses the differences between std::call_once and std::async in C++, particularly focusing on their use for deferred execution and managing non-copyable types with std::shared_future.
std::call_once vs. std::async
This article discusses the differences between std::call_once and std::async in C++, focusing on how std::async can be used for deferred execution. It explains the behavior of std::future and std::shared_future in managing deferred tasks.
Bringing Correctly Rounded Math to Production with LLVM-libc
This article discusses the use of LLVM-libc for compile-time evaluation and runtime execution of math functions in MSVC. It features insights from LLVM-libc contributors Michael Jones and Tue Ly on the design philosophy and implementation of their math functions.
C++26: Trivial infinite loops are no longer undefined behaviour
This article discusses the changes in C++26 regarding trivial infinite loops and their treatment as defined behavior. It provides insights into the implications of this change for C++ developers.
Magic statics vs. std::call_once
This article discusses two methods for caching results in C++: using magic statics and std::call_once. It compares their convenience and accessibility across multiple functions.
Magic statics vs. std::call_once
This article discusses two methods for caching the result of a function that checks OS features: using magic statics and std::call_once. It compares their convenience and accessibility across multiple functions.
Targeting 25 years of Windows with Visual Studio 2019
O ur method to build software compatible down to Windows 2000 using Visual Studio 2017 served us well for several months. And trust me, I had really hoped that Windows 2000 would be as low as we ever had to go. But the world of industrial…
Why do Microsoft job levels start in the high 50’s instead of starting at a sane number like 1?
This article discusses the rationale behind Microsoft's job level system, which starts at level 59 for entry-level software engineers. It explains the historical context and the changes made to improve promotion rates and employee morale.
Why do Microsoft job levels start in the high 50’s instead of starting at a sane number like 1?
This article explains the rationale behind Microsoft's job level system, which starts at level 59 for entry-level positions. It discusses the historical context and the changes made to improve career progression and employee morale.
C++ in the Age of AI: Visual Studio at CppCon 2026
This article discusses how Visual Studio is evolving to enhance productivity for C++ developers, particularly in the context of AI integration and large codebases. It serves as a companion guide to a session presented at CppCon 2026.
Push-based vs Pull-based Customization
This article discusses the differences between push-based and pull-based customization in C++. It explores the implications of each approach and provides insights into when to use them.
What’s New for C++ Developers in Visual Studio 2026 (18.7 – 18.10)
This blog post recaps the changes in Visual Studio 2026 from versions 18.7 to 18.10, highlighting improvements for C++ developers, including new tools and bug fixes.
Why didn’t ReadDirectoryChangesW provide a way to correlate the two sides of a rename operation?
This article discusses the lack of a correlation mechanism in ReadDirectoryChangesW for rename operations, speculating on the reasons behind this design choice. It highlights the potential issues with file system behavior and the assumptions made in tracking rename events.
Why didn’t ReadDirectoryChangesW provide a way to correlate the two sides of a rename operation?
The article discusses the lack of a correlation mechanism in ReadDirectoryChangesW for rename operations, speculating on the reasons behind this design choice. It highlights potential issues with file system behavior and the assumptions made by developers regarding rename event handling.
Being lazy in C++
Old blog résumé Twitter Being lazy in C++ September 12, 2026 C++ Context Again, I haven’t posted in a long time. I suppose I’ll have to start all my new articles with this sentence, ahaha. I can say I was a bit lazy, and that’s a good…
How can I remove the Close button from my window caption?
This article discusses methods to remove the Close button from a window caption in a Windows application. It explains the implications of removing the System menu and provides code snippets to disable the Close button while retaining Minimize and Maximize options.
How can I remove the Close button from my window caption?
This article discusses methods to remove the Close button from a window caption in a Windows application. It explains the implications of removing the System menu and provides code snippets for disabling the Close button while keeping Minimize and Maximize options.
MSVC C++23: constexpr cmath with LLVM Libc
This article discusses the implementation of constexpr math functions in C++23 as part of MSVC's experimental features. It highlights the changes made to the standard library and invites user feedback on the new functionality.
Optimizing a Spin-Lock
A spin-lock is a lock that never sleeps. Instead of yielding to the scheduler, the thread stays on the CPU and spins . No syscalls. No context switches. In this post, we’ll build a version, step by step, that is 5.7x faster while drawing…
Why is the x86 undefined instruction called ud2? Why 2?
This article explains the purpose of the x86 instruction 'ud2', which is used to generate an 'invalid opcode' exception. It discusses the history and reasoning behind its naming and usage in compilers to mark unreachable code.
Why is the x86 undefined instruction called ud2? Why 2?
This article explains the purpose of the x86 instruction 'ud2', which is used to generate an 'invalid opcode' exception. It discusses the historical context and reasoning behind the naming of this instruction.