Welcome to SwedenCpp
Latest blogs, videos, podcasts and releases in one stream
Wednesday, May 20, 2026
Medical Image AI Researchers Need a Secure Annotation PlatformMedical imaging AI research often runs into a familiar bottleneck: the data exists, but security requirements make it unusable. Sensitive datasets are: Over the past three years, Kitware has worked closely on a self-hosted medical image annotation deployment designed to address this challenge. The result is a secure platform that keeps sensitive data fully within [β¦]πKitware Inc
Qt for Android Automotive 6.11.1 is releasedThe latest patch release of Qt for Android Automotive 6.11.1 was released. This release is based on Qt 6.11.1 with around 450 bug fixes, security updates, and other improvements within Qt base . You can check out the exact changes done in Qt in the documentation . There are no major changes in Qt for Android Automotive itself.πQt Blog
C++ Insights - Episode 74: Why move requires noexcept in C++20π₯Andreas Fertig
Lambdas, Ranges and trivially_copyable: Why This Matters for Parallel Algorithms - Ruslan Arutyunyanπ₯CppCon
(Maybe) All The Contract PapersSome people might say that the upcoming {cpp} contracts feature is one of the best researched topics in {cpp}. I am not sure I agree, but a lot of work has gone into it.πEngineering the Craft
A Cross-Platform C# UI Framework via Qtβs Bridging TechnologyEvery C# UI framework comes with a familiar pattern: Windows-first, Linux absent, roadmap uncertain. WPF stalled, MAUI skipped Linux, WinUI 3 stays Windows-native. At the same time, demand for embedded Linux grows and C# teams feel the lack of good UI alternatives for C# on Linux. Qt Bridges, a bridging technology in public beta for C#, provides access to a UI framework that allows preserving your existing C# codebase while utilizing Qt Quickβs feature-rich UI libraries and APIs, hardware acceleration, and cross-platform capability.πQt Blog
Qt Bridges: Public Beta for the C# Bridge Is Out!Qt Bridges is a project we have been developing since 2025 to bring Qtβs UI framework capabilities to other programming languages, without going through the full set of bindings. The focus is on the interaction with backend data objects, seamlessly integrated as QML components in a Qt Quick interface.πQt Blog
Embedded Musical Signal Processing with Csound 7 - From Microcontrollers to FPGAs - Aman Jagwaniπ₯audiodevcon
The SARIF Viewer Is Now Available in CLion 2026.1.2Starting with v2026.1.2, CLion includes the SARIFThe Static Analysis Results Interchange Format. Viewer, available out of the box. This is especially useful for embedded and automotive teams, for whom external static analysis is often part of the compliance toolchain. If you use tools that produce SARIF reports β such as Parasoft C/C++test, Clang Static Analyzer, [β¦]πCLion : A Cross-Platform IDE for C and C++ | The JetBrains Blog
C++ Insights Episode 74: Why move requires noexcept in C++20I published a new C++ insights episode: Why move requires noexcept in C++20. In this episode, you'll learn why noexcept is crucial for move operations of a class. AndreasπAndreasFertig.comIf this page is useful, please consider your support
Tuesday, May 19, 2026
Static Analysis for C++ with CMake and PVS-StudioStatic analysis is one of the most practical ways to improve the quality of a C++ codebase before bugs escape into reviews, releases, or user reports. This matters in any project, but it matters even more in open source, where code is maintained over time by contributors with different levels of familiarity with internal invariants, parser assumptions, and platform-specific behavior.πKitware Inc
Introducing Sample Profile Guided Optimization in MSVCProfile Guided Optimization (PGO) has long been one of the most powerful tools in the MSVC compilerβs arsenal for improving the runtime performance of C and C++ applications. By using execution profile data collected from representative workloads, PGO enables the compiler to make smarter decisions about inlining, code layout, and hot/cold code separation β decisions [β¦] The post Introducing Sample Profile Guided Optimization in MSVC appeared first on C++ Team Blog .πC++ Team Blog
Lexer: functions, keywords, operatorπ₯PVS-Studio
Quick Meeting C++ 2026 introπ₯MeetingCpp
What the functions of the lexer doπ₯PVS-Studio
What is the history of the ERROR_ARENA_TRASHED error code?The storage control blocks were destroyed. The post What is the history of the ERROR_ ARENA_ TRASHED error code? appeared first on The Old New Thing .πThe Old New Thing
Lightning Talk: Understanding Data Dependency Chains - Makar Kuznietsov - CppCon 2025π₯CppCon
π VESPA 1.0 is out now!We are excited to announce that VESPA is mature enough for its official 1.0 release! VESPA (VTK Enhanced with Surface Processing Algorithm) is a VTK module and a ParaView plugin dedicated to mesh and surface processing. VESPA brings the power of the CGAL (Computational Geometry Algorithms Library) library into VTK and ParaView workflows. By wrapping [β¦]πKitware Inc
Format your code the right way! (C example)π₯Jacob Sorber
Introducing Qt's GUI Design Skill: Design for Developers in Agentic WorkflowsWhy UI Developers Need Sometimes Design Support - and How the Skill Provides It Not every UI developer has a UX designer at their disposal. Some R&D teams, especially in small and medium-sized businesses, need to build a user interface without the help of human UI design experts.πQt Blog
Just released: the library announced in Anthony Williams Meeting C++ 2025 opening keynoteπMeeting C++ blog
People THINK C++ is hard; It isn'tπ₯Kea Sigma Delta
NuGet PackageReference for C++ Projects in Visual StudioNative C++ projects (.vcxproj) now support NuGet PackageReference, the same modern package management experience .NET developers have used for years. Available as an experimental feature in Visual Studio 2026 version 18.7. The post NuGet PackageReference for C++ Projects in Visual Studio appeared first on C++ Team Blog .πC++ Team BlogMonday, May 18, 2026
SIMD-accelerated integer-to-string conversionConverting a 64-bit integer to its decimal string representation is a mundane task that shows up everywhere: logging, JSON serialization, CSV output, debug prints, etc. In C++, you might use std::to_chars, sprintf, or some library routine. How do these functions work? At a high level, they repeatedly divide by ten. Start with your integer k. β¦ Continue reading SIMD-accelerated integer-to-string conversionπDaniel Lemire's blog
CVPR 2026Kitware is proud to participate in the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) 2026, one of the premier venues for cutting-edge research in computer vision and machine learning. Building on our long-standing involvement in the CVPR community, we look forward to sharing our latest work, connecting with collaborators, and engaging with researchers advancing the state of the art.πKitware Inc
VTK Hackathon β May 13, 2026On May 13, 2026, the Visualization Toolkit (VTK) developer community gathered for a hands-on hackathon. As an open source project, VTK relies on the contributions of its community, and this event highlighted the collective effort to maintain and improve the toolkit. The objectives for the day included reducing technical debt, triaging issues, stabilizing builds, and [β¦]πKitware Inc
Zero-Cost Abstractions in Large C++ Systems - Shubhankar Gambhir - C++Online 2026π₯CppOnline
Just shows that nobody cares about debugging the parity flag any moreReported incorrectly since the day it was written. The post Just shows that nobody cares about debugging the parity flag any more appeared first on The Old New Thing .πThe Old New Thing
GPU Programming and HLSL with Chris Bieneman - CppCast 407 - C++Weekly Ep 537π₯Jason Turner
Let's make a programming language together!π₯PVS-Studio
How tokenization works: making a programming languageπ₯PVS-Studio
Let's make a programming language: lexer!π₯PVS-Studio
Lightning Talk: How Fast Isnβt You Constexpr? - Hossein GhahramanzadehAnigh - CppCon 2025π₯CppCon
Let's make a programming language. Lexerπ₯PVS-Studio
Real-Time EEG for Adaptive Music in Games and VR - Marta Rossi - ADC 2025π₯audiodevcon
Introducing the AI Code Documentation Skills for QtWriting reference documentation for Qt/C++ and QML code has traditionally meant either maintaining hand-written Markdown files that drift out of sync with the source or running toolchains that require annotated comment blocks throughout the codebase. The Qt documentation skills give developers a third option for higher productivity: point an AI agent at your source files and get structured, developer-ready Markdown reference docs in seconds.πQt BlogSunday, May 17, 2026
PVS-Studio in CMake: It's official now!If you're working on a cross-platform project in C or C++, you usually don't rely on a single build system, but instead use a build script generator. CMake, the most popular one, has recently been...πfrom pvs-studio.com
Let's Talk About AIπ₯The Cherno
A simple question? When to copy, when to move?π₯MeetingCpp
C++ on courses.mshah.io | Modern Cpp Seriesπ₯Mike ShahSaturday, May 16, 2026
Lecture 26. Coroutines, part II: Awaiters and Threads (MIPT, 2025-2026).π₯Konstantin Vladimirov
BeCPP Symposium 2026 - Gabriel Dos Reis - Tightening the Screws with C++ Profilesπ₯BeCPP Users Group
How to join or concat ranges, C++26Modern C++ continuously improves its range library to provide more expressive, flexible, and efficient ways to manipulate collections. Usually, when you wanted to concatenate or flatten ranges, youβd use raw loops or custom algorithms. With C++βs range adaptors, we now have an elegant and efficient way to process collections lazily without unnecessary allocations. In this post, we will explore three powerful range adaptors introduced in different C++ standards: std::ranges::concat_view (C++26) std::ranges::join_view (C++20) std::ranges::join_with_view (C++23) Letβs break down their differences, use cases, and examples. Updated in May 2026: added from_range construction options. std::ranges::concat_view (C++26) The concat_view allows you to concatenate multiple independent ranges into a single sequence. Unlike join_view , it does not require a range of ranges-it simply merges the given ranges sequentially while preserving their structure. In short: Takes multiple independent ranges as arguments. Supports random access if all underlying ranges support it. Allows modification if underlying ranges are writable. Lazy evaluation: No additional memory allocations. See the example: #include #include #include #include int main () { std :: vector std :: string > v1 { "world" , "hi" }; std :: vector std :: string > v2 { "abc" , "xyz" }; std :: string arr []{ "one" , "two" , "three" }; auto v1_rev = v1 | std :: views :: reverse ; auto concat = std :: views :: concat ( v1_rev , v2 , arr ); concat [ 0 ] = "hello" ; // access and write for ( auto & elem : concat ) std :: print ( "{} " , elem ); } See at @Compiler Explorer The output: hello world abc xyz one two three The example below shows how to concatenate three ranges, v1 is reversed and then combined with v2 and arr. Notice that we can also access the value at position 0 and update it. And a bit more complex example: #include #include #include #include #include struct Transaction { std :: string type ; double amount ; }; int main () { std :: vector Transaction > bank_transactions { { "Deposit" , 100.0 }, { "Withdraw" , 50.0 }, { "Deposit" , 200.0 } }; std :: list Transaction > credit_card_transactions { { "Charge" , 75.0 }, { "Payment" , 50.0 } }; auto filtered_bank = bank_transactions | std :: views :: filter ([]( const Transaction & t ) { return t . amount >= 100.0 ; }); auto filtered_credit = credit_card_transactions | std :: views :: filter ([]( const Transaction & t ) { return t . amount > 60.0 ; }); auto all_transactions = std :: views :: concat ( filtered_bank , filtered_credit ); for ( const auto & t : all_transactions ) std :: println ( "{} - {}$" , t . type , t . amount ); } Run @Compiler Explorer std::ranges::join_view (C++20) The join_view is designed for flattening a single range of ranges into a single sequence. It removes the structural boundaries between nested ranges. Works on a single range of ranges (e.g., std::vector > ). Does not support operator[] (no random access). Eliminates boundaries between sub-ranges. Lazy evaluation, avoiding memory copies. A simple example: #include #include #include int main () { std :: vector std :: vector int >> nested {{ 1 , 2 }, { 3 , 4 , 5 }, { 6 , 7 }}; auto joined = std :: views :: join ( nested ); for ( int i : joined ) std :: println ( i ); } Run @Compiler Explorer The output: 1 2 3 4 5 6 7 Of course, we can have different nested rangesβ¦ and this can be handy for string processing: #include #include #include #include #include int main () { std :: vector std :: string > words { "Hello" , "World" , "Coding" }; // regular: std :: map char , int > freq ; for ( auto & w : words ) for ( auto & c : w ) freq [ :: tolower ( c )] ++ ; // join: std :: map char , int > freq2 ; for ( auto & c : words | std :: views :: join ) freq2 [ :: tolower ( c )] ++ ; for ( auto & [ key , val ] : freq2 ) std :: println ( "{} -> {}" , key , val ); } Run @Compiler Explorer As you can see, thanks to views_join we can save one nested loop and iterate through a single range of characters. std::ranges::join_with_view (C++23) The join_with_view works like join_view , but it allows inserting a delimiter between flattened sub-ranges. Works on a single range of ranges. Allows specifying a delimiter (single element or a range). Does not support random access. Useful for formatting strings or separating collections. See the example below: #include #include #include #include #include std :: string to_uppercase ( std :: string_view word ) { std :: string result ( word ); for ( char & c : result ) c = std :: toupper ( static_cast unsigned char > ( c )); return result ; } int main () { std :: vector std :: string_view > words { "The" , "C++" , "ranges" , "library" }; auto words_up = words | std :: views :: transform ( to_uppercase ); auto joined = std :: views :: join_with ( words_up , std :: string_view ( " " )); for ( auto c : joined ) std :: cout c ; } See at Compiler Explorer Hereβs the expected output: THE C++ RANGES LIBRARY Creating new containers from the view I think I overlooked one important aspect of our experiments. Itβs good that we can print flattened or concatenated rangesβ¦ but what if you want to create another container from that view? A simple example could be as follows: std :: vector int > make_flat ( const std :: vector std :: vector int >> & nested ) { // ?? } auto new_vector = make_flat ( vec_vec ); We have at least four options here: Before C++23, we can push data to the new container in some loop, Or pass begin() and end() iterators, For C++23, we can use ranges::to() , Or, also for C++23, create container directly from a range/view. See the example here: #include #include #include #include #include std :: vector int > make_flat_loop ( const std :: vector std :: vector int >>& nested ) { std :: vector int > out ; for ( int value : nested | std :: views :: join ) out . push_back ( value ); return out ; } std :: vector int > make_flat_iters ( const std :: vector std :: vector int >>& nested ) { auto joined = nested | std :: views :: join ; return { joined . begin (), joined . end () }; } std :: vector int > make_flat_to ( const std :: vector std :: vector int >>& nested ) { return nested | std :: views :: join | std :: ranges :: to std :: vector int >> (); } std :: vector int > make_flat_from_range ( const std :: vector std :: vector int >>& nested ) { auto joined = nested | std :: views :: join ; return std :: vector int > ( std :: from_range , joined ); } int main () { std :: vector std :: vector int >> nested {{ 1 , 2 }, { 3 , 4 , 5 }, { 6 , 7 }}; auto flat1 = make_flat_loop ( nested ); auto flat2 = make_flat_iters ( nested ); auto flat3 = make_flat_to ( nested ); auto flat4 = make_flat_from_range ( nested ); for ( auto && flat : { flat1 , flat2 , flat3 , flat4 }) { for ( int value : flat ) std :: print ( "{} " , value ); std :: println ( "" ); } std :: vector std :: string > words { "C++" , "ranges" , "are" , "powerful" }; auto sentence = std :: string ( std :: from_range , std :: views :: join_with ( words , std :: string_view ( " " )) ); std :: println ( "{}" , sentence ); } See @Compiler Explorer The output: 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 C++ ranges are powerful The C++23 changes came from the following proposal: P1206R7 - Conversions from ranges to containers . Comparing concat_view , join_view , and join_with_view Feature concat_view β
join_view β
join_with_view β
Works on multiple independent ranges? β
β β Flattens nested ranges? β β
β
Supports separators between sub-ranges? β β β
Random access support? β
(if all inputs support it) β β Summary C++βs range adaptors provide efficient ways to manipulate collections without unnecessary copying. Hereβs a quick summary of when to use each view: Use concat_view when merging multiple independent ranges. Use join_view when flattening a range of ranges. Use join_with_view when flattening a range of ranges but needing a separator between elements. References Books: C++23 Best Practices - by Jason Turner Modern C++ Programming Cookbook - by Marius Bancila Programming: Principles and Practice Using C++ - by Bjarne Stroustrup Other: std::ranges::join_view - cppreference.com std::ranges::join_with_view - cppreference.com std::ranges::concat_view - cppreference.com Back to you Do you use ranges? What are your most useful views ald algorithms on ranges? Share your comments belowπC++ StoriesFriday, May 15, 2026
Principle Misunderstandings Of C++ Software Design - Kevlin Henney - C++Online 2026π₯CppOnline
The case of the CreateΒFileΒMapping that always reported ERROR_ALREADY_EXISTSMaybe because it already exists? The post The case of the CreateΒFileΒMapping that always reported ERROR_ ALREADY_ EXISTS appeared first on The Old New Thing .πThe Old New Thing
Lightning Talk: Bool - Implicitly Dangerous - Jeff Garland - CppCon 2025π₯CppCon
When to copy instead of move - threads & containersπ₯MeetingCpp
Qt Interface Framework with a new Control PanelYou've just implemented a new feature on the project you're working on. Now, it's time to test how does it work when the data is connected. In case you're working on a device which needs to listen to external devices or sensors, this might not be a trivial problem to solve.πQt Blog
Cross-Platform Music Software with Rust - Ian Hobson - ADC 2025π₯audiodevconThursday, May 14, 2026
Classes and RAII with βscopeβ - part 2 of N [D Language - Dlang Episode 140]π₯Mike Shah
Segment Heap support for C++ projects in Visual StudioLearn how Visual Studio enables Segment Heap by default for new C++ projects and how to adopt and verify it in existing builds. The post Segment Heap support for C++ projects in Visual Studio appeared first on C++ Team Blog .πC++ Team Blog
A constant-space linear-time algorithm for deleting all but the 10 most recent files in a directoryUsing data structures you already knew. The post A constant-space linear-time algorithm for deleting all but the 10 most recent files in a directory appeared first on The Old New Thing .πThe Old New Thing
Lightning Talk: Proof Searching in DepC - Raffaele Rossi - CppCon 2025π₯CppCon
Manipulating URLs with Boost URLπ₯Utah Cpp Programmers
Let's make a programming language!π₯PVS-Studio