Entwicklung & Code
Programmiersprache C++26: Reflexion zur Kompilierungszeit
Im heutigen Beitrag meines C++-Blogs möchte ich über C++26 und eine der wahrscheinlich wirkungsvollsten Funktionen schreiben, die dem Arbeitsentwurf hinzugefügt wurden. Auch wenn C++26 noch ein paar Wochen bis zur offiziellen Fertigstellung braucht, wissen wir seit dem WG21-Sommertreffen im Juni 2025, was in C++26 enthalten sein wird.
Weiterlesen nach der Anzeige

Andreas Fertig ist erfahrener C++-Trainer und Berater, der weltweit Präsenz- sowie Remote-Kurse anbietet. Er engagiert sich im C++-Standardisierungskomitee und spricht regelmäßig auf internationalen Konferenzen. Mit C++ Insights ( hat er ein international anerkanntes Tool entwickelt, das C++-Programmierenden hilft, C++ noch besser zu verstehen.
Der neue Standard wird viele spannende Verbesserungen bringen, aber die wahrscheinlich größte Veränderung ist die Reflexion (Reflection) zur Kompilierungszeit! In Sofia hat das Standardisierungs-Komitee sieben Reflection-Papiere für C++26 angenommen:
- P1306R5: Expansion statements
- P2996R13: Reflection for C++26
- P3096R12: Function parameter reflection in reflection for C++26
- P3293R3: Splicing a base class subobject
- P3394R4: Annotations for reflection
- P3491R3: define_static_{string,object,array}
- P3560R2: Error handling in reflection
Die verlinkten Beiträge bieten genügend theoretischen Lesestoff.
Kommen wir zur Praxis
Die wichtigste Frage ist: Was kannst du mit dieser neuen Funktion machen? Einige haben bereits ihre Ideen veröffentlicht.
Steve Downey hat ein Beispiel, das eine JSON-Zeichenkette zur Kompilierungszeit analysiert und daraus C++-Objekte erstellt. Der direkte Link zum Compiler Explorer lautet godbolt.org/z/YsEK418K6.
Weiterlesen nach der Anzeige
Das zweite Beispiel stammt von Jason Turner und ermöglicht es, Bindungen zu anderen Sprachen zu generieren. Der direkte Link zum Compiler Explorer lautet godbolt.org/z/6Y17EG984.
Ich finde beide Beispiele prima, aber will auch ein eigenes zeigen. Das Problem, das ich jahrelang zu lösen versucht habe und das auch in verschiedenen Schulungen und sogar in meinem eigenen Buch Programming with C++20 – Concepts, Coroutines, Ranges, and more auftaucht. Ich musste die bittere Pille schlucken, einen nicht so tollen Code zu zeigen.
Reflexion, Reflexion an der Wand, was kann ich mit dir alles machen?
Ich rede von Enums und nicht davon, wie man ein Enum in einen String konvertiert und umgekehrt. Der Code dafür ist übrigens in den oben verlinkten Beiträgen zu finden.
Nein, ich hab mindestens noch ein anderes Problem mit Enums: Iteration. Wie oft wollte ich schon über ein enum iterieren. Es gibt Lösungen, die meist makrobasiert und mit vielen Regeln sind. Zum Beispiel nur aufeinanderfolgende Zahlen und ein letztes Mitglied namens Last oder MAX. Aber was ist, wenn es Lücken in einem enum gibt? Wie
enum class Color { Transparent, Red = 2, Green, Blue = 8, Yellow };
Genau, dann greift die Regel, dass nicht aufeinanderfolgende Nummerierungen nicht erlaubt sind.
Folgender Code zeigt einen Ansatz, der anderen Sprachen wie C# ähnelt, in denen das Iterieren der enum-Werte ohne weitere Umstände möglich ist:
// #A
template
requires std::is_enum_v
constexpr inline auto num_enumerators_of{
std::meta::enumerators_of(^^E).size()};
// #B
template
requires std::is_enum_v
consteval auto get_enum_values()
{
std::array> res;
template for(size_t i{}; constexpr auto& e : std::define_static_array(
std::meta::enumerators_of(^^E)))
{
res[i++] = [:e:];
}
return res;
}
Ich habe in #A eine Hilfsvariable erstellt, einfach weil es für sich schon hilfreich ist, die Anzahl der Werte in einem enum zu ermitteln.
Die Implementierung für die Aufgabe selbst befindet sich dann in #B. Du kannst dir eine andere Implementierung ausdenken, die für größere Enums besser geeignet ist, aber diese hier ist schön kurz und bündig.
Die Utility-Funktion sieht in Aktion nicht besonders aus, und man merkt nicht, dass im Hintergrund eine Reflexion stattfindet:
for(const auto e : get_enum_values()) {
std::print("{} ", std::to_underlying(e));
}
std::println();
Wie du siehst, gibt #B den stark typisierten Enum-Wert zurück. Deshalb ist std::to_underlying erforderlich, wenn der Wert mit std::print verwendet wird. Das ist eine Designentscheidung: Der Code bleibt so lange wie möglich stark typisiert.
Es gibt noch weitere Designüberlegungen, beispielsweise ob get_enum_values auch eine Variable sein sollte, da sie für jeden Typ konstant ist.
An dieser Stelle werde ich nicht alle neuen Teile erklären, da ich nur zeigen möchte, was mit C++26 möglich ist.
Den vollständigen Code zum Experimentieren findest du im Compiler Explorer.
P.S.: Falls du dich fragst, ob die Implementierung von #B für ein leeres enum, welches ein std::array der Größe Null ergibt, korrekt ist, lautet die Antwort: Ja, der Code ist korrekt. Einer der Vorteile von std::array ist, dass es einen Sonderfall für den Fall der Größe Null gibt. Ein Array im C-Stil wäre nicht gültig.
(rme)
Entwicklung & Code
Software Testing: Effektives Testreporting ohne Overhead
In dieser Folge spricht Richard Seidl mit Matthias Groß über Testreporting und dessen Umsetzung im Projektalltag. Im Fokus steht eine pragmatische Herangehensweise: Statt überladener Dashboards setzt Matthias Groß auf eine klare 3×3-Matrix und automatisierte Datenaufbereitung mit Python und Excel.
Weiterlesen nach der Anzeige
Die beiden beleuchten, wie Testreporting nicht nur den Status sichtbar macht, sondern auch als Führungsinstrument genutzt werden kann. Das Gespräch zeigt, wie wichtig Zieldefinition, Datenqualität und flexible Sichten sind. Besonders spannend sind die Einblicke zu KI-Experimenten im Reporting und die ehrlichen Reflexionen darüber, was wirklich zählt.
Matthias Groß ist Partner der TestGilde GmbH und seit 2007 als Berater für Softwarequalitätssicherung und Testmanagement tätig. Seine Schwerpunkte liegen im operativen Testmanagement, der Einführung und Weiterentwicklung von Testmanagementstrukturen sowie der Betreuung kundenspezifischer Testservices. Er engagiert sich zudem an der Dualen Hochschule Baden-Württemberg, ist Mitgründer der Testcommunity The TestLänd und Mitglied des Programmkomitees des QS-Tags.
Software Testing im Gespräch
Bei diesem Format dreht sich alles um Softwarequalität: Ob Testautomatisierung, Qualität in agilen Projekten, Testdaten oder Testteams – Richard Seidl und seine Gäste schauen sich Dinge an, die mehr Qualität in die Softwareentwicklung bringen.
Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „Effektives Testreporting ohne Overhead – Matthias Groß“.
Weiterlesen nach der Anzeige
(mai)
Entwicklung & Code
PHP-Team stimmt über anerkannte Open-Source-Lizenzen ab
Die PHP Internals, also die Kernmitglieder des Projekts, stimmen derzeit über eine neue Open-Source-Lizenz für PHP und die Zend Engine ab. Die vorgeschlagene Modifizierte- oder 3-Klausel-BSD-Lizenz ist von der Open Source Initiative (OSI) und der Free Software Foundation (FSF) anerkannt und zur GPL kompatibel. An den bisherigen garantierten Rechten für Nutzer und Kontributoren soll sich dadurch nichts ändern.
Weiterlesen nach der Anzeige
Der RFC-Vorschlag begründet die Einführung einer neuen Lizenz mit dem bisherigen Durcheinander an Lizenzen, das historische Gründe hat. Derzeit erkennt die OSI zwar die PHP-Lizenz v3.01 als Open Source an, die Zend-Engine-Lizenz 2.0 jedoch nicht. Beide sind auch nicht zur GPL kompatibel.
Die beiden Komponenten werden aber gemeinsam entwickelt und liegen in einem Repository vor. Das ist für Außenstehende und Nutzer schwierig nachzuvollziehen: „Nach 25 Jahren Zusammenlebens im selben Quellcode-Repository sind beide so eng miteinander verflochten, dass die Zend Engine nicht mehr davon getrennt und als eigenständiges Produkt genutzt werden kann. Zusammen bilden sie die Referenzimplementierung der Programmiersprache PHP.“
Die 3-Klausel-BSD-Lizenz ist sehr freizügig und besagt als Besonderheit, dass Nutzer der Software die Namen der Urheber und Kontributoren nur nach vorheriger Erlaubnis für Werbung verwenden dürfen. Sie schränkt die bislang garantierten Rechte der vorangegangenen Lizenzen nicht ein, da diese eine ähnliche Klausel enthielten.
Die Abstimmung der PHP Internals über den im Juli 2025 veröffentlichten Vorschlag läuft bis zum 4. April, derzeit gibt es 23 Ja-Stimmen und eine Enthaltung. Der Kreis der Abstimmungsberechtigten liegt bei ca. vierzig Personen, und eine Zweidrittelmehrheit ist für den Erfolg notwendig.
Die Geschichte von PHP umfasst eine Vielzahl an Lizenzversuchen, die seit der ersten Veröffentlichung zum Einsatz gekommen sind, der RFC-Aufruf liefert einen kleinen historischen Abriss.
Weiterlesen nach der Anzeige
(who)
Entwicklung & Code
Open Source statt kostenpflichtig: Alpha-Version von Vite+ steht bereit
Vite+ Alpha ist erschienen – quelloffen unter MIT-Lizenz. Der Hersteller VoidZero, der auch das quelloffene JavaScript-Build-Tool Vite entwickelt, hatte Vite+ im letzten Jahr zunächst als für Unternehmen kostenpflichtiges Angebot angekündigt. Bei Vite+ handelt es sich um ein Kommandozeilentool, das eine einheitliche Toolchain für die Webentwicklung bieten soll.
Weiterlesen nach der Anzeige
Vite+ auch für Unternehmen Open Source
Wie VoidZero angibt, hat es sich entgegen der ersten Ankündigung im Oktober 2025 für die vollständige Open-Source-Veröffentlichung von Vite+ entschieden. Zunächst sollte Vite+ für größere Unternehmen kostenpflichtig sein, dagegen für individuelle Entwicklerinnen und Entwickler, Open-Source-Projekte sowie kleine Unternehmen kostenfrei. Der Hersteller begründet diesen Richtungswechsel unter anderem mit der ermüdenden Debatte darüber, welche Features kostenfrei und welche kostenpflichtig sein sollten. Auch Feedback von der Community spielte in die Entscheidung hinein.
(Bild: jaboy/123rf.com)

Tools und Trends in der JavaScript-Welt: Die enterJS 2026 wird am 16. und 17. Juni in Mannheim stattfinden. Das Programm dreht sich rund um JavaScript und TypeScript, Frameworks, Tools und Bibliotheken, Security, UX und mehr. Frühbuchertickets sind im Online-Ticketshop erhältlich.
Vite+: Einheitliche Toolchain für Web Developer
Laut Evan You, dem Entwickler von Vue.js und Vite sowie Gründer von VoidZero, haben sich im JavaScript-Umfeld die Tooling-Komplexität und die Performance für Unternehmen zu Flaschenhälsen entwickelt. An dieser Stelle soll Vite+ als einheitliche Toolchain Abhilfe schaffen, mit dem Ziel, Webentwicklung leichtgewichtiger, einfacher und schneller zu gestalten.
Vite+ ist ein Kommandozeileninterface, das die Technologien Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown sowie den neuen Task Runner namens Vite Task kombiniert. Damit soll es das Erstellen von Webprojekten vollständig abdecken – inklusive Testing, Linting, Formatierung und Verwaltung von Runtime und Paketmanager. Zum Konfigurieren aller Tools dient eine einzige vite.config.ts-Datei im Root des Projekts.
In Vite+ können Entwicklerinnen und Entwickler Befehle wie vp env zum Verwalten von Node.js – global oder je Projekt –, vp install zum Installieren von Dependencies, vp check für das Linting mit Oxlint, das Formatieren von Code mit Oxfmt und das Type-Checking mit tsgo oder vp build für das Erstellen von Produktions-Builds mit Rolldown und Oxc verwenden.
Weiterlesen nach der Anzeige
Wie VoidZero ausführt, funktionieren alle diese Befehle out-of-the-box nahtlos miteinander und sind mit allen Frameworks im Vite-Ökosystem kompatibel, beispielsweise React, Vue oder Svelte. Die Migration auf Vite+ soll am einfachsten funktionieren, wenn Entwickler bereits die kürzlich erschienene Version Vite 8.0 verwenden.
Alle weiteren Details zum Alpha-Release von Vite+ sind im VoidZero-Blog zu finden.
(mai)
-
Künstliche Intelligenzvor 3 MonatenSchnelles Boot statt Bus und Bahn: Was sich von London und New York lernen lässt
-
Social Mediavor 2 WochenCommunity Management und Zielgruppen-Analyse: Die besten Insights aus Blog und Podcast
-
Social Mediavor 1 MonatCommunity Management zwischen Reichweite und Verantwortung
-
Künstliche Intelligenzvor 4 Wochen
Top 10: Die beste kabellose Überwachungskamera im Test – Akku, WLAN, LTE & Solar
-
Social Mediavor 3 MonatenDie meistgehörten Gastfolgen 2025 im Feed & Fudder Podcast – Social Media, Recruiting und Karriere-Insights
-
UX/UI & Webdesignvor 2 MonatenEindrucksvolle neue Identity für White Ribbon › PAGE online
-
Künstliche Intelligenzvor 2 MonatenAumovio: neue Displaykonzepte und Zentralrechner mit NXP‑Prozessor
-
Künstliche Intelligenzvor 3 MonatenÜber 220 m³ Fläche: Neuer Satellit von AST SpaceMobile ist noch größer
