This curiosity was part of my CppCon Open Content talk in 2024, “Another Grab-bag of C++ Oddments”. The session highlighted C++ oddities, in the spirit of discovery through play. For reasons (TM), I want to be able to do this: Of note here: Some use cases I have in mind are things like logging, where… Continue reading Open Content at CppCon: One API for Types and Values
A Crossword for CppCon 2024 – Solutions
As a followup from last week, here’s an explanation of the CppCon crossword. I’m going to explain the construction process a bit, as well, so the solutions will be given in order of clue-writing, with some commentary on my thought process. Maybe a few people may find this interesting, I don’t know. Apologies for length.… Continue reading A Crossword for CppCon 2024 – Solutions
A Crossword for CppCon 2024
As well as being a C++ enthusiast, I’m a bit of a cruciverbalist. I do the Guardian cryptic every day (not in a particularly competitive time — I’d count sub-20 minutes as a good day), and sometimes others when I can. Like many Brits, I learned to do cryptic crosswords as a teenager. It’s true… Continue reading A Crossword for CppCon 2024
std::source_location is Broken
Everyone knows that the best way to get something done on the Internet is with an inflammatory title and a potentially incorrect contention, so here goes. What do you if you want to capture/log the filename of an assertion? Prior to C++20, you use good old __FILE__, which gives you a C-style array of chars.… Continue reading std::source_location is Broken
Modern C++? How about Contemporary C++?
What does “modern C++” mean? Some say it started in 2001 with Andrei Alexandrescu’s book Modern C++ Design. A lot of people describe C++11 and C++14 as modern; others say, “It’s time to stop calling C++11/14 modern C++, it’s not modern anymore.” Here’s another idea. The art world already settled this, so let’s take a… Continue reading Modern C++? How about Contemporary C++?
In Support of Implication for C++
The paper: https://wg21.link/p2971 I have a deck of cards. Each card has a number (integer) on the front, and is either red or blue on the back. (This is axiomatic, I know it a priori). My friend lays out four cards on the table in front of us at random. I see two face up,… Continue reading In Support of Implication for C++
Monads are part of C++, and are in your code
For several reasons, I didn’t get a CppCon ticket this year, but since I live in the Denver metro area I did go on the Friday, which is free to attend. Herb’s closing keynote (Cpp2) was thought provoking. At one point though, he said, Think about the words and the ideas that we have been… Continue reading Monads are part of C++, and are in your code
C++23’s new function syntax
We’ve had a couple of ways to spell functions for a long time: And we’ve had a shortcut for that second one for a while, too: (Aside: notice where [[nodiscard]] is positioned, since C++23’s P2173, to apply to the lambda’s call operator.) All these ways to spell functions look the same at the call site.… Continue reading C++23’s new function syntax
constexpr Function Parameters
The Set-up In C++, this doesn’t work: The compiler complains, quite rightly: Despite the fact that twice_square is a constexpr function, its parameter x is not constexpr. We can’t use it in a static_assert, we can’t pass it to a template, we can’t call an immediate (consteval) function with it. So far, so well known.… Continue reading constexpr Function Parameters
Familiar Template Syntax IILEs
A lot has already been said in the blogosphere about the use of immediately-invoked lambda expressions (IILEs) for initialization, and they’re certainly very useful. In C++20, P0428 gives us “familiar template syntax” for lambdas. Now, instead of writing a regular generic lambda: we have the option to use “familiar template syntax” to name the template… Continue reading Familiar Template Syntax IILEs