CppCast - Compiler Warnings as Errors with Keith Stockdale
Episode Date: April 20, 2026Jason and Mathieu are joined by Keith Stockdale to discuss C++26 news, his experience upgrading Sea of Thieves from C++14 to C++20 across compilers, and the practical challenges of raising compiler wa...rning levels and enabling warnings as errors. C++26 is Done - Trip Report, March 2026 ISO C++ Standards Meeting Announcing Meeting C++ 2026 Dear ImGui Explorer Common Package Specification Is Out the Gate
Transcript
Discussion (0)
Welcome to the 406th episode of CBPcast, the first podcast for C++ developers by C++ developers.
I am your host, Jason Turner.
For those of you just joining us, this is on a every fourth week cycle here, that this is a C++ weekly slash CBPCast episode.
We're releasing CPPCast once a month right now.
You can choose to watch on YouTube or your favorite podcast service.
I am joined by my new co-host, Matthew Ropère.
How are you doing, Matthew?
Great.
Great. How are you?
I think I'm doing all right. This is exciting and new and different and interesting.
Yeah, I think it's new for both of us.
I guess the difference is you maybe are more awake than me because I don't know how you,
what time is it in Colorado right now?
It is exactly noon.
Oh, okay. Then you peek your wake unless you had lunch just an hour ago and now you're asleep,
but hopefully you didn't go to lunch just before that.
I did have a...
But it's the sunset behind me.
Sorry.
I see that.
Yeah, you don't have much...
That your son's going to be staying up much later very soon here.
Yeah, I was looking that recently.
We just beating London on the sunrise.
I think we're still matched on the sunset, but it's going to go.
It's all uphill or downhill from here, depending how you want to look at it.
Where are you living right now?
Starkholm.
Starkome.
Yeah, yeah, yeah.
Okay.
You'll have plenty of daylight hours soon.
We all will.
Yes.
That's a topic for another conversation.
All right.
This week, we are joined by Keith Stockdale.
Keith is a Northern Irish senior software engineer who has been working on the engine and rendering teams at Rare since 2017.
But initially got his start there as a rendering intern in 2015.
He primarily works on engine and rendering level systems involving general purpose GPU systems, such as GPU particle systems.
Keith is enthusiastic about promoting and writing good quality code, whether it is running on the CPU or on the GPU.
Keith is currently working on a Shader Test framework, which aims to promote writing unit test for Shader code, just like you would with regular CPU code.
While working on this project, Keith contributed the test case persistent fixture to catch two.
Keith has also contributed to every major release of Unreal Engine from 5.2 to 5.7.
Welcome, Keith.
Thank you very much. Good to be here.
that is a very specific tech what is that test case persistent fixture um in so the way the catch two
works is if you've got a test case you can have what are known as sections and as soon as you
have sections in in your test case it'll run that test case for as many leaf sections as there
are in that test case and every time it does that it tears down the entire test fixture behind the
scenes and re and recreates it again.
That's a real problem if you're wanting to do really some really heavy
setup codes like creating a direct X12 context or maybe connecting to a database,
loading a big file, something like that.
So what this does is it means you can keep some very heavy initialization code
persistent throughout the entire test case.
So it'll speed up your tests in some cases if you're if that if that's the sort of
tests you're running, which I was.
Is there risk of that of state persisting and messing up for other tests?
That's up to you on whether you get your destructor correct or not, right?
So if you're if you're fixed your class, as long as it is doing the right destruction
in that, it should be fine.
One of the interesting iteration points was I initially had it so that it was it was mutable by default.
But through conversation on the PR, we actually decided on making it a constant by default.
So that if you're mutating that initialization state as you go through the test, you have to make a conscious effort to do that.
You have to opt into that.
So it's got the right defaults as well, which is quite nice.
Yeah, I was going to say, oh, then it's kind of like C++ when you have like all the options are there, but like 90% of them are basically going to blow you on.
but you just say they have to buy defaults.
That's clearly it's not C++ plus.
Plus.
You just look at Lambda's right.
Lambda's got everything right.
Pretty much.
That's actually very default.
Yeah.
Don't they have section in the,
because you mentioned it's called catch something, right?
And I got me thinking about catch two kind of immediately.
I think you have sections in catch two.
That's what he said.
Yeah.
Yeah.
Okay.
All right.
So it's the same idea.
No, it's the same thing.
It is an add on to catch two that he said.
Oh, it's an ad on.
Oh, okay, my bad.
It's my big open source contribution to the world.
It doesn't, and as an aside, I assume Rare had no problem with you making this contribution.
No, I talked about it and I was like, that's cool.
Yeah.
It's very nice to hear.
Yeah.
All right, we're going to talk about a few news items.
And again, since CBPcast is on a monthly rhythm right now, these aren't up to the minute news items.
up-to-the-minute news items, but they're just things that you may have missed.
The first being that C++-26 was actually finalized, and we have the trip report from Herb Sutter here.
So if I don't know, if either one of you have any comments, anything that's stuck out to you in this?
Oh, I have so many thoughts about Sipus 26, but maybe, maybe, maybe, maybe, keep with there.
Well, yeah, it's just it's all it's reflection reflection, right?
It's one of the headlines on that.
But yeah, I'm very excited for reflection.
There's a lot of things in 26 I'm really excited for.
One of the one of the thing that I was begging for,
well, I was I was wishing I had literally yesterday was template four.
I'm really looking forward to that.
I had one of those cases where you have like you have two,
you have two very out of template packs and you're just trying to go iterate through them.
And it's just fun with recursion.
But if I had template at 4, it would have been a much nicer experience.
And then the other thing is static assert.
You have formatable static assert stuff, which is really cool.
Yeah.
Yeah.
What about you, Matti, you want to poke out anything?
You can.
Go for it.
Yeah.
What did I do?
I did executions.
I'm still, you know, I'm always the fretting and parallelism guy when I can.
So I, you know, every couple years, I like, oh, maybe this will finally replace my local
copy of TBB for it, you know, I'm still building.
blocks. And so far, I haven't been very convinced. I wrote about it a couple months ago, I think.
I think it looks interesting for a sync. It doesn't look as good for parallel as basically been
my VAP. I think they had a parallel, like a Rivalent Parallel, I think it was called. And they removed
it at the last minute because it looked like it was not ready yet. So yet another, not this time
parallel for replacement. I'm going back to TBB again.
I have spent almost no time with execution.
I have friends who have been involved in it,
and then I try to look at it.
And I'm like, this is big.
Like, I feel like reflection is small compared to this.
I think the main difference is that execution is actually mostly library feature.
I don't think there is anything in the actual language itself.
Well, reflection is actually stuff in your compiler.
Plus, like, meta and I think there's like an overheader.
around that but execution is basically a library right yeah although herb did mention that he feels
this point one of those there things that it doesn't have all the nice wrappers around it so like
people are using it you can use it but it might take a lot of learning to actually learn how to
actually make use of it in an effective way it's like co-routines what we have exactly one helper for
co-routines still in the standard
Yeah, it's only generators, right?
Yes.
Just generator, yeah.
Although theoretically, execution works with co-routines, I think.
Yeah, and I think that was the big reason is that when you start working with co-routines,
it turns out making a generator is pretty easy.
We've outcote, but even better with C++ 23 generators.
But the minute you have to implement your own awaited suspend, it brings a lot of questions
that you have to answer.
Like, what does that mean suspend?
Where are you suspending to?
What's your resume?
condition, who's going to wake you up? Are you going to wake up on the same thread or on another
thread? Do you have a scheduler? Do you have a thread pool? And I think that's why you can't be
have a standard solution outside of having an entire framework like execution in the standard.
Because there is just like, what do you do? Like, what does it mean for your program to suspend?
What does it mean for your program to resume? Yeah. And I think that's why it's just, it's a big
kind of worm. This makes me curious, Keith. Like, do you, with all of the
game development GPU specific stuff that you'd use.
I was like, is, is, I was like, does this world even exist to you, right?
Like, parallel algorithms, for example.
Like, do you use that?
Yes.
We have this lovely little function in Unreal Engine called Parallel 4, which does exactly
what you think it does.
Handy.
Yes, yes.
So, yeah, we use our own breed of things, right?
I don't think we'll be touch and stood execution.
Full stop.
I thought you were going to say until C++-39 or something.
No, it's a really easy thing for us to start using language features,
but it's another thing if it's a library feature,
because they've got their own way of doing things in terms of the library and all of that.
So, yeah, language stuff.
So I can see us using reflection.
That'd be great.
But I did note in Herb's trip report,
he says he suspects that C++'s 26 adoption will be fine.
He specifically doesn't mention MSVC in his reasoning for that.
I don't think MSVC has any implementation of C++-26 yet.
Do they?
No.
Because you had called up for a while.
It's always seemed to be like a cycle, right?
Like between Clang GCC and MSVC, which one is ahead and which one is lagging behind.
Yeah, like they were super...
Yeah, they were super ahead in 20.
Like, I was always very proud.
Like, we've got...
We're using MSVC all the time and we've got all these cool things.
cool things and like i think we are deducing this really quick as well um and then it all just
sort of slow down oh interesting yeah for execution i think i just use the library anyway
i haven't tried reflection at all yet neither have 23 i think i have most of it already
question mark it's that's uh it's always the list of feature and the
the table that you have to uh i'm not going to say print because it changes every release
a ring release, but table of compilers, which, what are you allowed to do and what are you not allowed to do?
Yeah, as an aside, CVP stat.dev, if you all haven't seen that.
I just don't know, yes. It's pretty cool. Yeah, that one's doing a pretty job of that.
Well, it's interesting. I mean, well, I can derail from the interview, I guess, because I'm the host if I want to, but I'm reminded of Mike Acton's keynote, right, from so long ago.
from 14.
Basically, I mean, my takeaway from the keynote was game developers can't use
Lambda's because they're too expensive, basically, which is just like not correct, right?
And then an interesting, like, the next generation there is one reason, like,
Matt Godbold has stated this many times that Compile Explorer exists is because he was, like,
doing high frequency trading, and the team didn't trust ranged four loops, because those were
probably more expensive. So he made compiler explorer basically to see whether or not it was.
And so anyhow, I find it interesting that you say, oh, yeah, new language features. Yeah, no problem
adopting those. Well, 15 years ago, like, it was a big problem, right?
Well, I'm speaking for us specifically. I talk to other studios.
and some other studios, like, they still have these bands on fairly basic C++11 and 17 features.
So I'm speaking purely in my experience here.
We at Rared, we don't have an issue with new features.
I'm glad to hear that.
Yeah, it does, it does seem to vary a lot from studio to studio, how conservative they want to be with C++.
I do admit that I think, for my own experience, there is a breed of C++ program.
in game development that don't want to do C++.
They just want to do C with a few
extra features.
No, they want to do assembly.
It's more simple
if I only set a stop to like C-9
C-89 set.
A good example
of this is I was
submitting a change to
Unreal Engine and
they made me get rid of the
F-In-It statement.
I was using F-In-E-Net in C-V-E-E-Les.
17 and said this is this isn't very common and could be seen as something else or something I got there and I was like okay you you you pollute that outer scope if you want to that's fine I'll not argue with you I just wanted my change in I didn't like if that's your style that's fine but that's an example of like they had C++ 17 but they weren't using some nice features from it yeah I'm a fan of if a knit but when students push back on if a net I'm like you know
I appreciate that this one,
in a way you have to be looking for it, right?
Like, it's easy to skip that middle semicolon
or format it correct in a way
that you can see that it's a condition
and then a break and then the, excuse me,
a knit and then the condition.
Yeah, well, we have a visitor on camera.
Yes, yes, yes.
I think he's very curious.
Do you have thoughts on C++ Max?
My viewers will love to see a cat.
I guess I should move on with the news items,
and we're kind of already touching on the meat of the interview anyhow,
but the next news item that I head up here,
which will be still appropriate when this episode goes live,
is that meeting C++, 2026 has been announced,
and the call for papers is open until June 4th.
And this episode will air in a couple of weeks, three weeks, something like that.
So around the end of April, this will be airing.
So yeah, I think I am actually going to submit talks to meeting C++ this year,
which I have not done since 2017 personally, because it just doesn't tend to work with my schedule.
But are you two planning to go, thinking about it?
I did.
And then I saw the dates for it.
There's a very good chance I'll be very busy at that point.
So new, I think, is the answer for me.
very good chance I'll be busy. That sounds ominous. What about you, Ms. Q? I think it's, I'm going to have a
look. I've been on and off of meeting C++ from time to time. I think my big, the big thing I would,
I'd like to do is if I can combo it with a second conference, so I don't have to do like,
you know, the whole round trip through Europe. So a couple years ago, I managed to combine it with
code dive, which was really nice, because you get a nice train ride in from Berlin to Russia.
which is a nice change.
So I will look at the dates and I might send something.
Yeah.
And part of the appeal for me is the dates at the moment because,
well, my wife and I love going to Christmas markets in Germany.
And it's the weekend that the Christmas markets in Berlin opens.
So got to do what you have to do.
I guess what date is this?
I'm not even doing that.
The 26th to the 28th of November.
Yeah, I should have stated that.
But it's actually quite like November, okay?
Yeah.
I'll keep that in mind and see if maybe I'll be there.
I was talking to Yenzi's like, you know that it'll be over Thanksgiving, U.S. Thanksgiving.
And I'm like, okay.
Yeah, I don't think it's a thing we think about in Europe.
No, I was kind of surprised he pointed it out, yeah.
Well, I've been recently surprised at how many countries have a holiday called Thanksgiving
that is approximately the same as the one in the U.S.
I knew forever that Canada did, but there's apparently a few other countries as well.
I can't remember them off the top of my head right now.
So anyhow, the next item I have up is the Deer Imgooby Explorer.
And I don't know.
It just kind of, I just thought it was interesting.
Did either one of you play with this thing?
I did.
And I love these types of things.
Like, it's just like, Shader toy is a big thing for us or like, yeah,
compiler explore.
Just being able to like share stuff and just make stuff just really easily.
like that. It's always good. Yeah. Yeah. So for those who aren't familiar with dear, oh, sorry, go ahead.
Go ahead. Go ahead. Sorry. If you're not familiar with Deere M. GUE, it is an immediate mode
GUI, whatever. It's a handy GUI for C&C++ users, right? And apparently there's Python bindings as well.
And this is a tool online to let you explore all the different widgets and features that it has.
Yeah, and I really like that part because I use Ingoe from time to time on that. It's, I think it's,
it is, I don't know if you will
be with me on that one Keith, but it kind of is the
default I need to make a wee well quick in games
and game related stuff.
There's no equal.
Yeah, exactly.
There's no equal.
You're always reaching for it.
Yeah, yeah.
Is this still the case?
Because there used to be, like,
you always had to use a specific branch.
You always had to use the docking branch
because that would lead you to, like,
actually dock windows to each other and you could do cool stuff
with it.
But it was always in this other branch.
It was never in the,
it never got.
merged and you always had to look out specifically for that docking branch to get all the nice
cool stuff. I was just, I wonder now if it's been merged finally. I don't know. That's an interesting
question. No, yeah, I don't have, I haven't played with that either, but I think it is interesting
because the one thing I was mentioning, and I wanted to mention that I liked about the website is the
fact that you can actually explore the possible layout because my one issue with it when I try to use
it is that I was like, oh, what kind of UI can I make with this?
And, you know, having some examples and being able to build very quickly, like, well,
you can try it out, but just seeing all the stuff that's possible to me was already pretty
big.
If it was only a reference and I could edit it, I would already have loved it.
So now it's just like the extra icing on the cake.
Yeah, I didn't think you could do doc, kind of a thing I also want to have to try out now.
Can you live edit the code in the demo?
No, wait.
I'm not sure you can live edit it.
I assume you could, but maybe not.
Either way, if you click on something,
it will take you to the line of code that made that thing possible.
So you can at least see the example or whatever if I was made.
You all have no idea how many times I've been tempted to write a C++ wrapper around DeerM Goey
so that it automatically like in a few cases where you want it to like have a closing block or whatever, right?
So it just, but anyhow, I have not done that.
It's probably worth pointing out.
I can't, maybe I'll try to find a link to put in the show notes that there is a well-maintained
SFML to Deer M-GUEC++ binding library. One of my friends maintains it who goes to my meetup here.
And it is now easily ingestable with like CPM or like fetch contentable if you know.
So it now can be just like a single line to get SFML and Dear MGUE and whatever in your C++ project if you're just hacking something together real quick.
So something to play with.
All right.
Are you guys not using VC package?
I don't know.
Maybe I'm living in a different world.
But now every time I need to try something out, I just do VC package install and I'm done.
I, well, what about you, Keith?
I have opinions.
anytime I go to
so I do
I don't only do stuff that uses package managers
in my hobby stuff
but in my experience
whenever I'm reaching for certain libraries
I find that there is Conan has one
VC package has another
and they're not in both
and I just hate having to be
having everything all in one
so if you look at any of my hobby projects
you'll just find a huge amount of
fetch content
in CMIC.
Yeah.
So I basically just like do all of the package management through CMEC, but not through an actual package manager.
Well, I use CPM, which all it does is use fetch content in the back.
Yeah.
So it saves you an extra step there.
Yeah.
I was frustrated with V8, what's it called?
VC package.
The PC package.
The first time I tried it, and I haven't tried it in many years now,
because I go to install it and it insist on installing its entire own like toolchain of GCC and clang and everything.
And I'm like, no, no, no, no.
I want you to use the one that I already have.
So I just basically gave up on VC package and everyone back to it after that.
The last time I tried, I don't think that was the case.
I have no idea.
I don't remember being annoyed by that.
It'll pose that way.
It may have a few questions.
Corrects. If I recall, it does install a bunch of stuff for you.
Like, I think it does install like its own Cguino-M-Sys.
It might install its own C-MEC if you don't have the right version.
But I only use it on MSVC, so I don't know if you try to use it with Linux or Mac
if it tries something with your toolchain.
Yeah.
Well, C-P...
All right.
All right, we'll move on.
In a way, we'll move on because the final news item that I put in here for us to at least
mention is that Kitware has announced.
the first release of the common package specification,
which is supposed to make some of these things easier to work with.
But I don't know.
This is not a space on it again.
The whole point is standardizing how you ingest and consume packages, right?
I believe so, yeah.
Yes.
It sounds cool.
I read through it.
And I think there was a talk on it on this sort of thing at Sue Pcon.
I think some of the Kitware guys talked about.
So it sounds cool.
Maybe I'll have a look at it for future projects.
Yeah, I guess it's going to depend on adoption.
Yeah.
Like, is it going to have backends for like Conn and VC package,
whatever other people use us?
Or will it be?
I admit I used to write a lot about package management and whatnot,
but I kind of like moved on with my life like a couple years back.
I do remember writing a post about saying the problem we have is we do not have
any common description of packages that is actually usable because of all the possible options.
Didn't get a lot of traction back in the day.
So I'm glad to see that maybe I was not entirely incorrect about that opinion.
But yeah, time will tell.
Yeah, time will tell.
I agree.
I see new build systems being announced and I just say, that's interesting.
Let me know when it becomes usable, basically.
Like modules.
Yeah.
Like modules.
That's depressing.
Why do you have to say that?
Actually, I was playing with modules too then.
I think I'm finally, I'm finally getting there.
Finally.
Speaking, we're talking about meeting C++ earlier.
Danila made a talk at meeting C++ a couple years back.
I'm pretty sure she made it at other conferences.
I think it was, you know, like everyone, the secret of conference speakers is we have one talk
for you and we recycle it at like every conference.
with a slight variation.
So I'm pretty sure there is more than one version of this talk.
Either way, she was playing a lot with modules and she shows like she used ASIO,
she used FFMPEG, I think.
And if you have a thing, to make like a client server like video streaming library in one hour,
that does everything and compiles with module, a pretty good compile time and everything.
That was quite impressive.
And so every year, I try to play with modules.
And every year I give up after a day or two because I hit like a big hurdle.
I'm getting closer today.
I'm not saying I've actually
I finally got it and it's finally ready for me to be used
but I think I'm getting closer.
On Windows, with my latest version
of MSVC, do not ask me about other platforms
because I think I'm going to have more problems.
Well, good. I have one question.
How is Intelisense for it?
Oh.
So what you do is that on top of every import
directive, you do a pound if
italicense and then you put all your includes instead
and then you do else imports.
Right.
And it actually worked because the only thing
that takes forever to pause is your ID, which is fine because Intelicense already takes forever to
pass anyway, so I can't tell the difference, and I got my syntax and lighting working,
but my compile times are fine. And I think they killed Jay's gun with that one. That's the thing
that, like, has always stopped me from doing module stuff. I've got two projects and modules
that I've abandoned because the lack of Intellicense just irked me. Yes, yes. I was about to give up,
And I think this is the last time, the last iteration, which was like six months ago of my play with modules,
I found out that you can do Pound-D-Defth Intellisense.
And that works.
Just your IDEe lies and doesn't use modules.
Okay.
And then your actual compile times are using modules.
Excellent.
I will probably get some comments about that decision.
You know what?
It works.
I have auto-completion in modules.
Just next question.
Okay.
So what is the compiler that Intellisense actually is?
I'm trying to remember the new.
What's that?
It's EDG, Edison, the design group.
Yeah, Edison Design Group.
And from what I know from sources that I will not name at Microsoft,
it actually emulates some weird behavior and all parts of MSVC
when it's running for MSVC, the IDE.
Because since it's a different compiler,
sometimes it concludes different things,
which is also the reason why sometimes you get errors and warnings
that MSVC doesn't have because we're not the same compiler.
Or some static alerts are squiggled red whenever they compile just fine.
Yeah, exactly.
This is the news item I was just looking for, and I did find it.
The company announced in 2025 that it will be closing in 26,
and at CWSOS compiler front end will be open sourced.
So that has lots of questions about what will happen with Intellisense.
Will they be maintaining the open source fork of EDG?
Or are they going to do something completely different?
I can't name my sources, but from what I heard, every couple years,
there's someone at Microsoft was like, this is so silly,
why are we doing this and tries to use MSVC as the front end for Intellicense
and then gives up?
Because it's apparently just really, really hard to tool anything with MSVC, the compiler.
And that's why they kept using a DG behind the scenes.
Well, maybe it'll be interesting when and if,
assuming they actually open source it here.
I haven't seen it in a release of that.
Wow, since 1988.
That is amazing.
And so,
I'm sad
Yeah, in a way
But I mean, everyone should be allowed
To eventually drop a project
They've been working on for 40 years
You can't make them
Okay
We should probably
I don't know actually start the interview I guess
But
Keith
You've already mentioned this in your bio
That you're a fan of like code quality
Right
And you
I think you have I think probably the most viewed ACCU talk ever and it's rivaling most of the CBP con talks as well I believe there's probably only a few CBP con talks even that have more views and well I mean just go ahead and tell our audience why go ahead well I would love to if I could I don't know why there's probably a load of factors
why it was so
well I mean tell the audience what your talk
was about
it was all about my experience of upgrading
a fairly large code base so the game
I work on C of Thieves
from C++ plus 14 to 20
the ACCU
thumbnail would have you believe that we started on 11
we didn't that thumbnail
that thumbnail has done
terrible but great things
it
it's did the job in
driving engagement. I'll give it that, but it is so wrong. The longer you look at it, it just gets worse and worse. Now I'm curious. I have to go look at the thumbnail. Yeah. The two things that stand out is it implies that we started on 11. We didn't. I never mentioned 11. Well, I think I mentioned we got scope denums and C++ 11 and that was the only time I mentioned 11. And then the other thing is it implies that we went towards more MSVC specific codes. And half the talk is we are not doing that.
we were moving away from MSVC specific code for very good reasons.
So I look at that thumbnail, I just laugh.
It does job, good job.
Well, you know.
Do you think this is the reason?
I think that helped.
I remember whenever it first came out, I noticed that all the thumbnail was changing so often.
Like sometimes I get the proper AC thumbnail, you know, the one that everybody gets that makes you look
awesome, the picture of you.
That makes you look really cool on stage.
I had a few, there's a few of those there,
but they initially, they just landed on this thing
that just drove engagement with the pirate ships of C.F. Thieves
and C.S. Plus, yeah.
Like, I have to imagine that as part of it.
I think the other thing is from talking to people,
I think this is a story that a lot of engineers have went through.
And nobody's really talked about the experience.
And whenever I'm,
I was going through it. I was, I was like maybe despairing, but also giggling at the same time.
Like there was like you, you find some really horrid stuff whenever you start
upgrading a massive code base like this, some really obviously terrible stuff to start
dropping out. And it was like, I thought this would be a really good talk. And fun fact,
I first proposed this talk for GDC and they rejected it. So, so, so, um,
So they rejects it. I get it. It was very technical. And I don't think GDC specific, like, they don't really go hard on like the technicalities of CDOS and stuff.
They got there. It's a bit more high level. But yeah, and then I just, then on the week that I got rejected, ACU's call for papers went out.
I was like, I'll just copy PS my proposal. And it all went well.
And conveniently, much closer to home for you.
Absolutely. It was a two and a half hour drive. It was great.
I think Jason and I were both in the room.
At least I was in the room because I was at that AQ and I think you were there too.
I was definitely in the room, yes.
I remember him and Guy were just like humming and I,
outside of the room, should we go to this?
Should we not go to this?
I was like, come on in.
It's not right.
I don't remember that part.
I completely didn't know that.
I remember thinking, hey, Keith looks like a great.
No, I'm just kidding.
But I think you make an interesting point about the fact that nobody talked about it.
because I'm going to be honest.
I watched it.
I liked it, but it was a lot of like deja vu for me,
things happened in the past on other games.
And I think maybe I started having a conference brain,
you know, the fact that I spent too much time talking to other people at conferences
and I just assume this is how people talk about and this is what people talk about.
And then if you actually go online and try to research it,
there is not that many primary sources or talks or whatever.
There's stuff about migrating from legacy as a general concept,
but I don't think I heard people mentioning specifically like C++ version or
fighting Z conformance and whatnot.
Yeah.
Yeah.
I just thought it was, I had no aspirations for it to be exceptionally well received.
I just thought it was a really cool topic.
So I kind of live generally, I believe, in a different world than you two in that like every
project I've ever worked on has had to been multi-platform, multi-compiler.
So, like, a lot of the things, like, from my perspective, moving from C++,
14 to 17 to 20 to 23 is generally speaking just been, you change the standard version.
Oh, yeah.
And it compiles.
Yeah.
Right.
It's been rare that changing the standard version breaks my code.
So why don't you, like, for people who are like more like my background, explain, like,
what are the some of the things that you hit?
Like, why was this a big deal?
Well, the first was the whole idea of permissive C++.
Okay.
So whenever we started the project, like for us as an Xbox games you do, so like we're Microsoft first party, like MSVC is the only compiler, we're shipping Xbox games.
We are not shipping any other platform, right?
You have PC and Xbox.
You're an MSVC land.
So like you don't really think about it, right?
You just take the default.
The default's good.
let's start making a game and you don't really think about it for years and you just go along in your merry way if it compiles compiles if it doesn't it doesn't right and then as you say once you start introducing more compilers and more platforms to the mix issues start to arise and issues we did find yeah so we this started becoming a problem whenever we made the ps5 port so this was never something that we like i don't think anybody
in our wild like in at rare whatever thought that whenever we're making cf thieves it was going to go to a sony platform like that that that was wild like that was never something that we ever had to think about at least i never thought about it maybe the higher ups did but i certainly didn't um so so that whenever we had to start compiling with that compiler then we started to find real issues and a large part of the talk was also like talking about the whole idea of tech debt like what do you do and you're facing that scenario and if you
watch both talks, you'll probably hear Guy Davidson being very gleeful about like, why would
you ever do the thing that we did and just like do some tech debt, right? And just like get it
working when we did. And like tech debt's a whole tool, right? So we knew this is a problem,
but we also knew we had deadlines. So do you do the quote unquote bad thing and then you go back
later and you fix it all. And that's what we did. Right. And that worked really well for that. So we
did the bad thing, we did the preprocessor branching, and then we came back and we fixed it all and got it all to be standards conformant, and we got some really good wins out of it. So yeah. What compiler does PlayStation use? I'm not going to say that. I think it's a really well-known thing, but also I don't want to be the person to say it in person. Okay. It's not visual studio. No, I'm, so I say a PS5 compiler in public, but I think it's a really well-known, I think it's really well-known, but I'm not. Yeah, okay.
I will just say because I have no insight information that I thought it was LLVM.
And we can just assume that you're talking Visual Studio to one of the open source compilers, effectively.
And then we can roll with that.
Yeah.
Yeah.
That sounds.
Actually, I mean, I don't know.
I don't want to bounce back too far away from the topic.
But this is a question maybe.
Do you think like, I don't know if you had the same feeling as I had Keith, but I worked in the game industry for, I mean, I still consult for them.
And I still think sometimes they're more secretive about what they do in the defense industry.
And I wonder how much that factors into the fact that we don't talk about what we do
and how the fact that, yes, I had to agree to this compiler that I can't, for example, to me it's absurd that I can't even say that, you know, this is a very famous.
I don't have a deal with Sony.
I guess I can say that, yeah, maybe I suspect it might be a LVM.
But, you know, why can't I even mention the fact that the compiler used on a video game console might be X, Y, or Z?
To me, that's just absurd.
And I think that kind of plays into this whole idea that we don't talk enough about things.
Yeah, I don't.
I genuinely don't know.
But I think it's like it's all proprietary tooling.
And people like to keep that under wraps.
I could be wrong.
It could be, it could be that we, I can talk about it.
But I've seen some foreign posts.
No, I heard the same thing.
I heard the same thing.
I asked the question once and someone just literally answered me with a DM like,
hey, if you email me this way, I'll tell you that it is actually this version of this compiler.
They shouldn't be so hard to figure out what kind of compiler or feature set I can have on a given platform.
Yeah, couldn't possibly say.
But yeah, my point is more like, do you think this is hurtful for people talking about Winvento and what kind of issues we encounter and whatnot?
I didn't have much of an issue.
I just had to make sure that I didn't say the wrong thing on stage.
But I personally, those types of things I'm not that bothered about it.
As long as we were able to talk about some of the practices,
like I think being able to go up and speak at conferences on what we're working on,
I think that's really a really cool thing.
But I get it if people want to keep certain stuff proprietary and under wraps and stuff like that.
I just like talking about the code because the codes,
a cool bit.
As long as I can talk about the code, I'm a-okay.
Reminds me of like the 2018.
I'm going to ballpark era.
You know, for our listeners who don't go to C-BOS Plus conferences,
finance and high-frequency traders have a large presence at the conferences.
Speakers and presenter, you know, like the booths, they're always recruiting.
And there was a time frame, I think it was around 2018, when a,
Officially, none of the high-frequency traders were doing custom hardware.
No FPGAs, no ASICs.
Officially, that's what they would tell you.
But they all had job openings for people with FPGA and ASIC experience.
Yes.
I think that's why a lot of these open secrets become, sorry, these secrets become more open, right?
I think that's it.
You just look at the job listings or like gets a bit, and it becomes very obvious what you're doing.
So if PlayStation, if Sony is looking for an LLVM developer, then it gives it away right there, basically.
I mean, hypothetically, you're not going to say one way or the killer, but hypothetically, it would.
Going back to the topic, Keith, you said you had to, like, you know, when you made Cofee, obviously, you thought you were only going to be like Microsoft platforms.
And friends are always going to be MSBC.
But if I recall correctly, Unreal, like, you didn't have to patch Unreal itself, right?
because Unreal already has support for like consoles and you know LLVM or whatever.
It does not.
It didn't at the time?
So in my most recent talk, I show off some of the build tool codes that we have because we have it from the point that we forked.
I forget that I think it was like 2016. I could be wrong.
Unreal 410.
and they say that if you're compiling for clang they just turned off all the warnings because
they couldn't compile that's all gone so it's really good now like it compiles with clang just
fine now without any issue on like Linux and stuff but like back whenever we were doing stuff
uh-uh um no so like the engine's been getting really good over the last 10 years it just it
do all of that whenever we were making the game.
Yeah.
And then because we forked, we didn't get all the nice benefits of
of all of their work that they did to improve everything going forward.
Now I forget, have you merged back?
Absolutely not.
That's never happening.
No.
We'll still take cherry picks.
So, like, if we find a bug in the engine or the editor,
like, the first thing we'll do is just go and look at the get history
because like it's it's kind of open right like you can see unreal engines coding get quite easily um
so you just go and look and it's like oh yes they fixed this at this point okay we'll just grab that change
right so we'll still take stuff from them but um there's still no the divergence isn't seen
no it's it could be massive yeah 10 years of engine differences i can i can sympathize uh yeah
no i think the answer is immediately nope not going to happen
Yeah.
Okay, so the interoperability work is more recent than I thought.
It is good, though.
I mean, I think it was a sign of like the shift in focuses and mindset in the late 20-10s
or mid-2010s where more and more platforms realize that they should,
they would better be of supporting more things and being more like open to alternative,
like compilers, tool chains, platforms and whatnot than just targeting one thing.
And I think it has done some good.
Oh, absolutely.
Yeah.
Yeah, compile with all the compilers you count.
After after that doing that, I switched a lot of my hobby projects to compiling with Clang CL and stuff.
And that was quite fun as well.
I have a lightning talk geared up for a C-on-C around one of the things that that upgrade happened.
The upgrade showed me, essentially.
Yeah.
Spoiler alert.
Yeah, I think I saw your name.
You're going to be speaking at Q-1C, right?
Right?
Yes, I am.
Yes.
Is it the three of us?
Now I'm thinking, Jason, are you at a QNC this year?
Oh, yeah.
I'm giving a workshop as well.
Yeah.
Oh, okay.
Well, I guess we'll see each other and the listeners who come to a QNC.
Yeah, you should come.
I mean, I'm a fan of basically all the conferences, and I'll just take a moment to say that, too.
There's this year, a C++ specific.
Can we call ACU C-Bus-plus-specific?
Yeah, esh.
Esh.
They'll take other languages if you want to.
Yeah.
I mean, C-plus-plus on C was C-plus-specific.
It essentially merged with ACU.
Accu is more systems-language-specific,
which is true also for in DC-Tech Town.
It's systems-language-specific,
mostly with a heavy leaning towards C-plus-plus.
A lot of C12 plus people go there.
So from my estimation, there's three C++ conferences in North America each year and about
eight or nine in Europe each year right now.
And that includes the new Belgian C++ symposium, Keith, that you were at.
And I heard great things and that they are hoping to bring it back next year.
And also not yet, not officially announced, but there was some tagged Pute.
dates for the Dutch C++ under the C conference coming back again in 2026 as well.
Yeah, and I heard the thing that started as a small university thing in Madrid, I think, is getting bigger too.
Yeah, the Madrid one happens every year. There's also a small Italian one that happens every year.
I think it's only one day in Italy. So I'm including all those in my count of like nine.
Yeah.
Yeah, I'm still keeping my fingers crossed for Paris to come back. I don't know. If Fred or Joel are listening, please
Please keep coming, come back.
Do you need an excuse to visit Paris again, Matthew?
It's a good pretext and yeah, yeah.
I mean, again, for the listeners, speaking is free travel.
So, you know, if you want to go to Paris or Madrid or any city you want to visit, you know, to become a speaker.
Almost every conference will pay for travel and I believe every conference does pay for hotel.
Yeah. If it's a C++1, there are, there are some conferences out there that do not.
Yes. I mean, it's the conferences I just mentioned.
Yes.
It's not talk about certain game conferences that pay nothing.
Yes.
They're a hard sale to your company.
And whether or not you recycle a talk, it is still like speaking at a one, speaking at a two-day conference is at least four days of your life, you know, that it takes to speak at the one, you know,
day at a conference. If you give one talk at a two-day conference, it's four days of your life.
That's what I'm trying to say, at least, because you also have the prep time for the talk itself.
Well, on the topic of conferences, and you already brought up at you, do you want to give us a preview of what you're going to be giving there?
Your title is public now. It is. It's a sequel, right? We love sequels to the Keens industry.
So I decided to keep the same tagline as my previous talk.
How hard could it be?
It's all about getting to a higher warning level and slapping on warnings as errors at the end of it.
And yeah, it's largely in the same thing as same VN as my previous talk.
And yeah, I gave it at BCP and it seemed to have went down quite well.
I had a very large Q&A at the end, which was really cool.
It was very, it was, it was, it was, it was, it was, it was, it was, it was, it was, it was, it was, it was, it was
question just kept coming. It was great.
Yeah, it went really well.
And it definitely, I definitely learned a few things I'm going to add to it.
Um, a large amount of the content around that conference.
It was along the same lines of trying to make more tooling to find logic errors and very silly
mistakes that your compiler can just find if you enable warnings, right?
And most people, most people already know this.
Most people will start a project and they'll start off with all the highest warnings,
but us in Gamesland, that's not the world we live in.
So it's all about how if you don't live in that world, how can you claw your way into that world?
I really must say it's really not most developers start with all warnings.
I can say this as someone who's done training and literally ever,
industry. Games is not special in this regard. Everyone disregards warnings for the most part.
I'd love to see it. Unreal does a very special thing, which is very public. I just don't want to
give away too many spoilers at the talk. Okay. We still have to sell some tickets.
Exactly, yeah. So we can't give you everything on a free podcast.
Yeah. So you're enabling warnings as errors. That's the thing, right?
And up in the warning level, yes.
So uping the warning level and then making those warnings errors is the goal.
From W3 to W4.
Well.
Or high.
Okay.
All right.
All right.
No spoilers.
All right.
All right.
All you more.
Well, that's a hard, that's a complicated story.
And it takes a good 20 minutes to get to that point.
Okay.
There we go.
Yeah.
I know this is your interview.
But Jason, do you see that?
people don't start with warnings?
Like, what's the reason for a new project?
Because for a legacy project, I can understand this.
This looks like a mountain of warnings I will never get through.
But, like, if you're just starting from scratch.
I mean, it's partially lack of education because if you start with Visual Studio,
maybe you just start with what the default is.
And SW3 is the default, right?
Which is pretty good.
W4 is much better.
W4 gives you a lot of conversions, like,
implicit convergence between built-in types warnings that are in my opinion spectacular and necessary
um and very difficult to deal with if you don't start out with them yes uh yes i'm aware okay so uh so there's
that and then there's the um and then people are like oh well the the code you know like well this one
warning was getting in our way so they just like disable that one warning or whatever and by the
time you've disabled one warning why not disable another warning right
So that happens.
And then on the other side of just not knowing, like I always ask my students this,
does W all enable all of the warnings?
Depends.
Just as a question.
It depends.
It depends.
Yes.
On Visual Studio, it does enable all the warnings.
On GCC and Claying, it enables what I tongue and cheek say was all of the warnings in 1988,
which is I know not actually accurate but you know and just for the record W extra does not include W all
so I've seen people with W all think that they have all the warnings enabled they fire do not
and I've seen people with W extra who think that they have even more warnings enabled and they don't
they only have the warnings from WXstra right because it's not levels it's its collections you
basically pull in a set of warnings.
That's really interesting.
And then none of those has W conversion either, right?
None of them have W conversion.
And then between GCC and Kling,
what you actually get with W conversion is kind of significantly different.
Yes.
I have a quote.
I'm going to call Herb out right now if I don't, if you don't mind.
In 2018,
2018, Herb gave a talk.
And it was when he was talking about his lifetime,
analysis warnings that they were funding with like Visual Studio.
And he said, we don't...
Whatever happened to that?
I don't know.
GCC has them now, just for the record.
W. Lifetime isn't GCC, no.
I don't know what happened to Visual Studio.
He said, we don't have to teach things that all compilers warn on.
And I would agree with him except for the fact that developers don't enable their warnings.
And it's still something that is I consider an education matter.
Yeah.
Yeah.
Yeah, the bad defaults on a, I guess we can go back to build system and the fact that if you start a new project,
Visual Studio has its own thing if you start a project on Visual Studio, but I would argue if you start a new project this day, you should probably put in C-Make or something slightly more portable than a V-S solution.
Yeah.
But even then, you pull a bunch of default that were some guy's opinion, I don't know when.
Who knows when?
So fun fact by that.
So whenever I made one of my projects, I had a set to W4WX for MSBC and had a semic branch, a generator branch.
If it's complying with anything else, it was WL, WXA, W-XA, W-Conversion, W-R.
That's a good start.
That's a problem whenever you bring Clang CL into the mix, which I did.
Because Clang CL...
Expects the...
What Clang-C-L will do is it's...
it's a MSVC front end, so it takes all the switches from MSVC.
So it'll take the Klang path because you're not using MSVC.
It sees W all, and then all of the warnings come.
Ah.
Because it does that translate the flags as errors to Klang?
Yeah, because W all for, yeah, because W all for MSVC is everything.
So it will actually do everything on Klang.
Yes, yes.
When you thought that you'd, okay.
Yeah, there's a fairly large gotcha because I thought I was going mad, but there's loads of like blog posts.
There's a few Git issues where there's like a decent amount of argumentation and conversation around.
Should that be the thing?
Because it's very unexpected whenever you have W all in there.
So yeah.
Yeah, that's interesting.
Yeah, I guess I would have expected that he would do all warnings because it's supposed to emulate him as you see.
Yeah, but me, I just.
I thought I was, oh, I'm compiling with Klein.
Right.
So you have to have a special switch in your C-Mate configuration that says if C-L-C-L, then do...
Yes, you have to make that yourself.
You have to make sure that if you're compiling with...
I forget what it was, but you have to look out for both things.
And if both things there, then it's Clang-C-L.
Yeah.
I would, yeah, no, I do recommend if you're starting a project from scratch, at least a W-4 and W-X on Windows.
But if and to go back to your question about you and again, this isn't my interview, it's Keith, but when you can start a flow, well, you used to be able to when Twitter was more fun, start a flameware very quickly by saying W. Warnings is error should be your default. And oh my goodness, people come out of the woodwork. Yes. Because they're like, oh, no, that's impossible. You can't actually. Yes, you can. You can make W error your default or WX on Visual Studio.
Yeah, well, there's people in the common section of my ACU talk saying you should never do this.
Warning should be warnings.
And I was just like, no, because at the end of it, I talk about like what I'm going to do next, which I have done.
And yeah, I was just like, no, I think it's a good idea.
I think that's the whole point of profiles, right?
Yeah, like I was going to ask, what's the point of not using WX?
Because for my personal experience, I had the same issue with assets, which, uh,
We used to have on the games that worked on.
We had assets and we had important assets.
And important asset would immediately trap you in the debugger, et cetera.
Not important asset would not even show up in debug.
We'd not really show up in release build.
You will only see them in debug builds.
And even then by default, they were still off.
So I'm like, what's the point of...
Then what happens is it becomes like a wall of warnings
and then you immediately stop listening because it's just noise, right?
you turn them off.
That's exactly that.
Yeah, if you have like a student project of like 200 lines, then fine.
Maybe you can ignore the two warnings because that's the one, two warnings of your project.
But anyone who does that on a non-trival code base know that you stop reading because it's just noise.
Yep.
Yep.
I have a lot of people argue with me that you should have, for the developer, warnings as errors should be disabled.
And warnings as error should only be enabled on the CI.
And I say that is absolutely a horrible idea
because now you're going to treat the CI like it's your adversary
and it's not.
You could have fixed that locally.
I was thinking the opposite today, actually,
because warnings have a compilation cost.
Right.
And if you're running bills a lot on your CI,
you could probably save a decent amount of time and money
if you were to disable warnings and errors
on certain jobs.
On certain jobs.
Yeah.
So basically jobs that create artifacts
that are given to other parts of your CI.
They should probably.
I'm not said probably.
This is the thought that I had today.
Maybe you should disable warnings
so that it's quicker builds
and then go on.
But then you might have some separate jobs
that don't feed into anything else
and they still have everything on to catch everything.
That wouldn't be caught in Dev time.
But you keep it on for dev
because you want people to be able to catch all of these locally in their local developer environments.
Just a thought.
That's an interesting thought.
That's part three in your talk series.
Well, yeah, not sure.
Yeah, I don't know.
That sounds a bit dangerous to be used to the world to talk.
That is hard to save the like Amazon bills or whatever by removing warnings on your CI.
I could see like a single fast path.
build I mean like literally one of them with the warnings disabled so you get as fast as
possible feedback from your CI you can get that build artifact you can test it on
the on the on the prototype machine or whatever like hypothetically like I can
see that as a hypothetical yeah right just a thought yeah I think I would ask you
like how much does that cost compared to you know if I if I may go back to what we were
talking earlier about like you see plus plus feature I think
like how many warnings can you get if you don't use like executional ranges in your in your
co-based?
I know that compile times are like the thing that people will rant about forever and say that
this is impossible to use because of the compile times.
I've never heard of warnings and I usually have to fight people because I include the STL or
whatever.
So like is that even like a measurable cost compared to?
Well, I've.
Yeah.
Yeah, like Gabriel Dostraeus, he had a very good talk at BCP all about profiles.
I had never really watched anything about profiles up until now,
which are basically standardized warnings, at least that's my impression.
And one of his slides was taught reasoning about the compilation cost
because the compiler is having to do extra work to actually validate
whether you're breaking certain warnings or not.
And he did have costs up there.
And that's sort of what planted idea in my head.
warnings are not free.
They're all like they're they're they're pretty cheap but there is a cost to them.
Right.
But are we talking your standard warning or are we talking like warning that are
desperately trying to be rust if I might well I don't know.
I recall a very long time ago I believe it was Isabella Mwerte had actually measured
that code that generated a lot of warnings compiled considerably slower than code that did not generate a lot of warnings.
And if I recall, she wasn't disabling the warnings, right?
It was the code has now been fixed, therefore it doesn't generate warnings.
It now compiles faster.
But I don't know anyone else.
I mean, you obviously just told us about Gabby's talk, but I haven't seen any
anyone else talk about that?
That could be that maybe warnings.
I don't know how these things are implemented,
but they're probably trying to early out as soon as possible.
So as soon as they can, like,
as soon as they see a hint that they don't have to look further
for any more issues, they can just stop, right?
Stop the analysis.
Yeah.
The only way I would see that was back like,
I don't know, 20 years ago when I had like a software implementation
of a frame buffer on Linux and like literally writing to
terminal would have a cost. So if you have lots of one and you literally
compile slower because you're waiting on IO for printing to the terminal.
Yeah. I don't know. I would hope that no these days everything is writing to like a
pipe or a container or whatever there's no way. Although I had a game once that was
actually slowed down by an assert that was like every frame dumping a lot of stack traces
and you could notice when you were triggering the answer because like the logger was
flottling the main loop. Yeah, they probably had an
an end line on every single one of those lines too or something.
Yeah, the longer was definitely synchronous and now it's not like on another fight, blah, blah, blah,
but still, like you could physically see the asset slow down the product.
Oh, man.
Because it was just doing too much file, I.O.
Well, we think we've kind of, we're at an hour.
We should probably wrap up the conversation here.
We do like to stick the around an hour here.
So clearly all of our listeners are excited to come see you at Acu, Keith.
I think at this point.
Is there anything else that you'd like to share as we wrap up?
I don't think so, no.
I've had a really good time speaking recently.
And yeah, if you enjoy writing Sheter codes,
have a look at my Sheter testing framework.
It's pretty cool.
It does remind me of a question I intended to ask.
Was this, that talk at ACU last year,
was that your first conference talk?
No, I talked at ACU 20 at 2023.
remotely with one of the visual studio guys, David Lee.
And then I've also spoken at GDC in 2024.
And then actually, whenever I was first mentioned on this podcast,
that was for pure virtual C++ plus in 2024 as well,
whenever Cy Brand was on.
That was a little while ago.
And I just noticed you actually have your collection
of badges. I do. I keep, I like them. Yep. I have collected all of my badges, but I have gotten
rid of the lanyards because the volume that it takes up at this point. So now I just have like a stack
that's like this, yeah. No, I have spoken at considerably fewer places than you. So I haven't got
to tough time. It's just a matter of time. You'll get there as well. I'll retire. Once you start,
you get more. Yeah. Matu, does you have any less?
questions you wanted to get in here? No, I think we had like a good roundup as mentioned.
And we can be in the mind of the listener and we know that he wants to, they want to come
and see the talk. So they will hopefully be at AQ1C. And or I don't know if you have any other
conferences that you submitted to. Maybe you don't want to tell until you know if you're
taking a lot or. Yeah. Are we going to see you at other conferences?
Me? No, I don't think so. Just at you. I think three in a year.
is enough for me.
Yeah, that's fair.
I'll ramp it up, maybe.
Every year seems to be one more than previous year.
I did one in 2023, two and 24, and then two and 25, and then I've done three and 26, yeah.
I think I'm averaging about five right now, but I might end up at seven or eight this year.
See how things go.
Not bad.
All right.
Cool.
Well, thanks everyone for joining us.
