Announcing 3D Slicer 5.123D Slicer 5.12 is now available. This latest stable release includes updates to DICOM workflows, visualization, Python package management, Qt 6 build support, and the extension ecosystem. Slicer 5.12 serves as a stable release before the project continues broader work related to Qt 6 and native Apple Silicon support.๐Kitware IncWelcome to SwedenCpp
Latest blogs, videos, podcasts and releases in one stream
Wednesday, July 15, 2026
Announcing 3D Slicer 5.123D Slicer 5.12 is now available. This latest stable release includes updates to DICOM workflows, visualization, Python package management, Qt 6 build support, and the extension ecosystem. Slicer 5.12 serves as a stable release before the project continues broader work related to Qt 6 and native Apple Silicon support.๐Kitware Inc
The case of the invalid function pointer when shutting down the display control panelWatching the bits disappear. The post The case of the invalid function pointer when shutting down the display control panel appeared first on The Old New Thing .๐The Old New Thing
2026 Military Health System Research Symposium (MHSRS)Kitware is proud to return to the Military Health System Research Symposium (MHSRS), the premier scientific meeting dedicated to advancing research and technologies that support Warfighter health and medical readiness. We are exhibiting at Booth 624, where we will demonstrate our open source software for military medical applications.๐Kitware Inc
C++ Insights - Episode 76: New, better, lambda visualization in C++ Insights๐ฅAndreas Fertig
PSD to DAW - Building a Pixel-Perfect UI Pipeline - Bence Kovรกcs - ADC 2025๐ฅaudiodevcon
C++ Insights Episode 76: New, better, lambda visualization in C++ InsightsI published a new C++ insights episode: New, better, lambda visualization in C++ Insights. In this episode, you'll share the latest change in C++ Insights regarding visualizing lambdas. Andreas๐AndreasFertig.comIf this page is useful, please consider donating a coffee
Tuesday, July 14, 2026
Rethinking C++ Performance: Faster Code Navigation and GitHub Copilot Tools with Whole Codebase IndexingIn large C++ codebases, your code understanding and navigation depend on quickly determining how symbols, declarations, definitions, and references are connected across your project. In Visual Studio Insiders 18.9, the new whole codebase indexing (WCI) enhances the existing browse database via a deeper, more comprehensive indexing approach. This preview feature allows Visual Studio to access [โฆ] The post Rethinking C++ Performance: Faster Code Navigation and GitHub Copilot Tools with Whole Codebase Indexing appeared first on C++ Team Blog .๐C++ Team Blog
CMake 4.4.0 available for downloadCMake 4.4.0 available for download๐Kitware Inc
Joaquรญn M. Lรณpez Muรฑoz: A Life in Code, and Why Boost Endures๐ฅC++ Alliance
What is a local C++ User Group?๐ฅMeetingCpp
July's C Vu Journal has been published.The July 2026 ACCU C Vu journal has been published and should arrive at members' addresses in the next few days. C Vu 38-3 and previous issues of C Vu can be accessed via the Journals menu (ACCU members only).๐ACCU
Microspeak: Double-click and drill downPlease, tell me more. The post Microspeak: Double-click and drill down appeared first on The Old New Thing .๐The Old New Thing
Keynote: Benchmarking - It's About Time - Matt Godbolt - C++Now 2026๐ฅCppNow
PVS-Studio with CMake projects๐ฅPVS-Studio
OpenGL Multitexturing - Using 2 or more textures as data in glsl [Episode 43]๐ฅMike ShahMonday, July 13, 2026
Pure Virtual C++ 2026 [Meet the Speakers, Part 2]: The AI-Native C++ Developer WorkflowPure Virtual C++ 2026 streams Tuesday, July 21, 2026 at 9:00 AM PT, a free, one-day virtual conference for the whole C++ community, live on YouTube (Microsoft Reactor) and Twitch, with on-demand recordings on the Visual Studio YouTube channel afterward. Register now โ Welcome to part two of our Meet the Speakers series. In part one we looked at building and running [โฆ] The post Pure Virtual C++ 2026 [Meet the Speakers, Part 2]: The AI-Native C++ Developer Workflow appeared first on C++ Team Blog .๐C++ Team Blog
C++ Contracts - A Meaningfully Viable Product Part 2๐ฅCppOnline
Why donโt we just make the entire stack out of guard pages?Guard pages all the way down? The post Why donโt we just make the entire stack out of guard pages? appeared first on The Old New Thing .๐The Old New Thing
40 Years of C++ Programming and Embeddable Languages - Mark Guidarelli CppCast 409 / C++Weekly 541๐ฅJason Turner
Building Inclusive Audio Tools - Accessibility with ARIA, WCAG, and Real-World Projects - ADC 2025๐ฅaudiodevcon
CTAD and printing a vector [C++ Shorts Lesson 20]๐ฅMike ShahSunday, July 12, 2026
HMake: Caching And Correctness๐ฅGlobalCpp
Keynote: Multidimensional Parallel Standard C++ - Mark Hoemmen - C++Now 2026๐ฅCppNow
Real-Time Audio in Python: Introducing the asmu Package - Felix Huber - ADC 2025๐ฅaudiodevcon
nullptr and pass by reference preference [C++ Shorts Lesson 19]๐ฅMike ShahSaturday, July 11, 2026
X just gave us an interface that AI agents can use. I pointed it at my own posts.I have been on X for a long time. Like most people who post regularly, I have a gut feeling for what might interest people. I post in the morning. Longer posts seem to do better. But gut feelings are not measurements. And until recently, digging into your own posting data meant either clicking around โฆ Continue reading X just gave us an interface that AI agents can use. I pointed it at my own posts.๐Daniel Lemire's blog
My terrible PAL decoder running on a live SDR capture of my Sega Master System๐ฅMatt Godbolt
After the Tutorial: Where to Continue your Graphics Programming Journey - Mike Shah GPC 2025๐ฅMike ShahFriday, July 10, 2026
Never Twice the Same Color๐ฅMatt Godbolt
The case of the mysterious changes to integers when there shouldnโt have been any code generation effectDecoding where those integer came from. The post The case of the mysterious changes to integers when there shouldnโt have been any code generation effect appeared first on The Old New Thing .๐The Old New Thing
Whatโs in a Warning?For a while, users have been asking for CMake to do a better job of warning about undesirable uses, such as using functions that should not be used in โmodernโ CMake. Starting with CMake 4.4, we are finally making inroads on those requests, but the journey there went through some interesting and unexpected territory. This is a bit of a peek โunder the hoodโ of CMake development, which is a bit of a deviation for a normally user-focused blog, but we wanted to share because it has the potential to impact users, and we wanted to explain why we felt the changes, and the potential pain associated with them, are warranted.๐Kitware Inc
Keynote: Reflection Is Only Half the Story - Barry Revzin - C++Now 2026๐ฅCppNow
Bugs Iโve Seen in the Wild - From Confusion to Amazement - Olivier Petit - ADC 2025๐ฅaudiodevcon
Using some modern C++ features to avoid macrosRecently I had an opportunity to use some non-obvious C++ language features, which in those days doesn't happen that often to me. ๐ To be frank, lately I'm doing more QML and JavaScript programming than pure C++, so I was more than happy to be able to jump into the challenge. The (arguably small) problem I had, was that I had to define a seemingly endless amount of callback functions all doing basically just the same thing: auto callb = [this](std::expected result) -> void { if (result.has_value()) { emit okNotification(result.value()); logCallback("BlaBlaCallback " + std::to_string(result.value())); } else { emit errorNotification(std::to_underlying(result.error())); logCallback("BlaBlaCallback ERROR: " + std::to_string(std::to_underlying(result.error()))); } }; As you can see, I was working with Qt and I used their signal/slot mechanism. In this context the emit clause sends a signal to all parties that subscribed for it. So basically we need a callback that looks into a std::expected value and decides what kind of a Qt signal has to be sent - an error notification or a value change one. Additionally, std::expected result can contain values of different types: integers of different ranges and signs, as well as floating point numbers and enum values. 1. The definition The first idea to come (because I'm oldskool?) was a macro . I even wrote one, but then I said to myself - come on, that's ugly, Bjarne working all the time to give us mechanism to make macros obsolete and now I write that abomination? So, ashamed, I deleted it immediately and started with a template-based solution. As templates are kinda oldskool themselves, I wanted to try polymorphic lambdas first , hoping that maybe compiler can figure out all that parametrization stuff for me and I will just write down the auto keyword and everything will be good in the world. So I wrote this piece of code: auto makeUint32Callback = [this](auto notifOk, auto notifErr, const std::string& label) { return [this, notifOk, notifErr, label](std::expected result) -> void { if (result.has_value()) { emit (this->*notifOk)(result.value()); logCallbacks(label + " " + std::to_string(result.value())); } else { emit (this->*notifErr)(std::to_underlying(result.error())); logCallbacks(label + " ERROR: " + std::to_string(std::to_underlying(result.error()))); } }; }; As you can see, I defined a helper function (a lambda in the local scope), which constructs the final lambda from provided parameters, which final lambda can then serve all callbacks reporting value changes for values of type uint32 ! Nice one, but what about other value types? Do we have to define makeInt32Callback(), makeUint8Callback(), makeFloatCallback() etc? We certainly don't want that! To the rescue comes a C++20 feature called templated lambdas . Don't fear, it's very simple, we just give a type parameter to the lambda and it's all we need here: auto makeTypedCallback = [this] (auto notifOk, auto notifErr, const std::string& label) { return [this, notifOk, notifErr, label](std::expected result) -> void { if (result.has_value()) { emit (this->*notifOk)(result.value()); logCallbacks(label + " " + std::to_string(result.value())); } else { emit (this->*notifErr)(std::to_underlying(result.error())); logCallbacks(label + " ERROR: " + std::to_string(std::to_underlying(result.error()))); } }; }; As easy as that! We then just forward the type parameter T to the std::expected parameter definition and that's it. Now we even can go further and add support for enum types using an if constexpr construct inside of the lambda: auto makeMyCallback = [this] (auto notifOk, auto notifErr, const std::string& label) { return [this, notifOk, notifErr, label](std::expected result) -> void if (result.has_value()) { if constexpr (std::is_enum_v ) { emit (this->*notifOk)(std::to_underlying(result.value())); logCallbacks(label + " " + std::to_string(std::to_underlying(result.value()))); } else { emit (this->*notifOk)(result.value()); logCallbacks(label + " " + std::to_string(result.value())); } } else { emit (this->*notifErr)(std::to_underlying(result.error())); logCallbacks(label + " ERROR: " + std::to_string(std::to_underlying(result.error()))); } }; }; When seeing if constexpr compiler will decide which branch of the code has to be taken and which has to be ignored. And all that at compile time! 2. The invocation Now as we have our templated, polymorphic lambda ready, we just invoke it for each pair of notifications and we are done! But how exactly should we invoke a templated lambda? Somehow it's not that obvious. We could try to do it the standard way, just as we always have done with data structurers, i.e. like that: auto callb = makeMyCallback ( &NotifThreadWrapper::operationModeChanged, &NotifThreadWrapper::operationModeChangeError, "OperationModeCallback"); But the compiler won't let us have it! ๐ The right way, however, is: auto callb = makeMyCallback.operator() ( &NotifThreadWrapper::operationModeChanged, &NotifThreadWrapper::operationModeChangeError, "OperationModeCallback"); Why's that? Well, as it turns out, you cannot templatize a lambda as a whole, but you can only templatize its function call operator! An that is what the funny looking syntax does: lambda.operator() (args) , the type T comes after the call operator. If you think about it, it is quite logical, a lambda is just a generalized function, so you parametrize the function call, right? Because, c ome on, it's even declared like that: [] (T x) { /* ... */ } in the first place! On the other hand however it is just syntax, and the Standard Committee could add support for the first invocation as well. The chose not to. 3. Extending it further Some time later I added some new callbacks taking a std::pair of something as parameter. How can we support this new callback type in the makeMyCallback() helper? Simple, another if constexpr will do it: ... else if constexpr (is_pair_v ) // why not std::is_pair_v ??? { emit (this->*notifOk)(result.value().first, result.value().second); logCallbacks(label + " " + std::to_string(result.value().first) + "/" + std::to_string(result.value().second)); } However, because apparently there isn't a std::is_pair_v predicat e in the standard library ๐ฎ, I also had to provide following definitions: template struct is_pair : std::false_type {}; template struct is_pair > : std::true_type {}; template inline constexpr bool is_pair_v = is_pair ::value; Easy, but std::is_pair would be so much nicer! 4. Wrap-up And there it is: a polymorphic, templated lambda returning a lambda , thus clearly being a metafunction* (yay!). Or can we call it meta-lambda/metalambda? Now you know how to write yourself one and, what's maybe even more important, also how to invoke it and put it to good use instead of polluting your code with ugly macros! __ * metafunctions - function returning other functions, it should be pretty clear? But it isn't. For example Boost MPL libraray ( "...high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions." ) defines them quite differently: "... A metafunction is a class or a class template that represents a function invocable at compile-time", thus clearly meaning just a * constexpr * function. Hmmm... ๐ค Other definition I've seen are "...functions that operate on types, rather than traditional runtime values" or "...Metafunctions are program elements (classes in C++) that can return computed types" . This definition makes more sense than the MPL one, but how can we then name a lambda returning a lambda? Here I chose to stick to functional programming nomenclature where I first learned that concept: "...A metafunction is simply a function that operates on other functions or on representations of functions, often at the metaโlevel (i.e., reasoning about code, types, or syntax rather than just data)". Of course, we could also use the (more correct) term "higher order functions" , but "metafunction" sounds so much crispier ๐, so I hope you will forgive me this little stretch of nomenclature.๐On Software and Languages
pass by reference [C++ Shorts Lesson 18]๐ฅMike ShahThursday, July 9, 2026
Pure Virtual C++ 2026 [Meet the Speakers, Part 1]: Build Faster, Run FasterMeet the speakers behind Pure Virtual C++ 2026. In part one, Ryan Shepherd and David Li show how to build faster and smaller with C++20 modules and GitHub Copilot build performance. The post Pure Virtual C++ 2026 [Meet the Speakers, Part 1]: Build Faster, Run Faster appeared first on C++ Team Blog .๐C++ Team Blog
M&M 2026Kitware is pleased to be returning to the Microscopy & Microanalysis (M&M) conference. This year, we will be exhibiting and hosting a vendor tutorial about the Tomviz 3.0 release. We also had a platform presentation accepted on our DOE Phase II-funded open source multivariate visualization work. Visit us at Booth #1222 to learn more, or contact our team to schedule a meeting.๐Kitware Inc
Iโve decoded a #pragma detect_mismatch error and fixed the mismatch, but I still get the errorYou need to rebuild everything that was dependent on the change. The post Iโve decoded a #pragma detect_mismatch error and fixed the mismatch, but I still get the error appeared first on The Old New Thing .๐The Old New Thing
Refactoring Towards Structured Concurrency๐ฅCppOnline
Whatโs New in vcpkg (June 2026)These June updates add a vcpkg-tool switch to skip installation when packages are already cached, OpenHarmony (OHOS) platform support, and major library updates including curl 8.21, CGAL 6.2, and Graphviz 15. The post Whatโs New in vcpkg (June 2026) appeared first on C++ Team Blog .๐C++ Team Blog