Hi Thiago,
Thanks for your thoughtful response. I just wanted to clarify that my proposal was never intended to
replace the existing API based on std::ios::openmode. I fully agree that dynamic composition of flags is essential and cannot be expressed at compile time — which is precisely why the old API must remain.
What I’m suggesting is a parallel API, designed for the simpler, static cases where compile-time safety and readability are beneficial. Much like how std::span complements raw pointers without replacing them, this new interface could offer:
-
-Cleaner syntax for common use cases (open_file("data.txt"))
-
-Compile-time validation of mode combinations
-
-A gentler learning curve for newcomers
-
In short, it’s not about removing flexibility — it’s about offering a more expressive and safer alternative when the use case allows it. For anything dynamic, the traditional API remains the right tool.
-
Thanks again for engaging with the idea!
-
Best regards,
Jerome
-
De: Std-Proposals <std-proposals-bounces@lists.isocpp.org> de la part de Thiago Macieira via Std-Proposals <std-proposals@lists.isocpp.org>
Envoyé: Samedi 06 septembre 2025 17:13
À: std-proposals@lists.isocpp.org <std-proposals@lists.isocpp.org>
Cc: Thiago Macieira <thiago@macieira.org>
Objet: Re: [std-proposals] [Draft] Typed and Safer Stream API for C++
On Saturday, 6 September 2025 04:05:58 Pacific Daylight Time Jerome Saint-
Martin via Std-Proposals wrote:
> auto f = open_file<Mode::read>("data.txt");
> auto g = open_file<write | Mode ::binary>("log.bin");
We'll never get rid of the old API with this, because we may have:
std::ios::openmode mode = std::ios::in | std::ios::binary;
if (rw)
mode |= std::ios::out;
if (trunc)
mode |= std::ios::trunc;
since the above can't be done at constexpr time, either the old API must still
be taught or we'd have to write a 2^N combination of the new open_file<> calls.
And if we need to teach an API, we'll end up with the simplest.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Principal Engineer - Intel Platform & System Engineering