CppCast - Compiler Warnings as Errors with Keith Stockdale

Episode Date: April 20, 2026

Jason 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)
Starting point is 00:00:00 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.
Starting point is 00:00:29 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.
Starting point is 00:00:59 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.
Starting point is 00:01:12 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.
Starting point is 00:01:25 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.
Starting point is 00:01:52 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
Starting point is 00:02:41 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.
Starting point is 00:03:19 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.
Starting point is 00:04:01 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.
Starting point is 00:04:31 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.
Starting point is 00:04:46 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.
Starting point is 00:04:55 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.
Starting point is 00:05:17 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.
Starting point is 00:06:02 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.
Starting point is 00:06:26 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.
Starting point is 00:06:42 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
Starting point is 00:07:12 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.
Starting point is 00:07:40 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
Starting point is 00:08:25 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.
Starting point is 00:08:48 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.
Starting point is 00:09:11 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.
Starting point is 00:09:44 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.
Starting point is 00:10:06 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.
Starting point is 00:10:30 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...
Starting point is 00:10:51 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
Starting point is 00:11:25 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?
Starting point is 00:12:13 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.
Starting point is 00:13:06 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.
Starting point is 00:13:32 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
Starting point is 00:13:51 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
Starting point is 00:14:40 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.
Starting point is 00:15:01 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.
Starting point is 00:15:29 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
Starting point is 00:16:03 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,
Starting point is 00:16:39 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?
Starting point is 00:16:57 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.
Starting point is 00:17:24 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.
Starting point is 00:17:48 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,
Starting point is 00:18:26 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.
Starting point is 00:18:41 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.
Starting point is 00:18:53 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
Starting point is 00:19:24 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?
Starting point is 00:19:52 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?
Starting point is 00:20:17 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.
Starting point is 00:21:04 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
Starting point is 00:21:22 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
Starting point is 00:21:37 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.
Starting point is 00:21:58 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.
Starting point is 00:22:21 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.
Starting point is 00:22:45 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.
Starting point is 00:23:05 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?
Starting point is 00:23:33 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.
Starting point is 00:23:53 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
Starting point is 00:24:16 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.
Starting point is 00:24:47 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.
Starting point is 00:25:01 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,
Starting point is 00:25:26 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
Starting point is 00:25:48 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.
Starting point is 00:26:04 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,
Starting point is 00:26:25 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.
Starting point is 00:26:57 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.
Starting point is 00:27:12 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.
Starting point is 00:27:34 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,
Starting point is 00:27:58 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?
Starting point is 00:28:27 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,
Starting point is 00:28:49 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
Starting point is 00:29:05 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
Starting point is 00:29:45 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
Starting point is 00:30:01 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.
Starting point is 00:30:51 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.
Starting point is 00:31:17 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.
Starting point is 00:31:41 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.
Starting point is 00:32:25 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,
Starting point is 00:32:55 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.
Starting point is 00:33:09 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.
Starting point is 00:33:31 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.
Starting point is 00:33:58 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.
Starting point is 00:34:26 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.
Starting point is 00:35:00 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
Starting point is 00:36:10 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.
Starting point is 00:37:22 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.
Starting point is 00:37:39 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.
Starting point is 00:38:15 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.
Starting point is 00:38:32 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.
Starting point is 00:39:08 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.
Starting point is 00:39:41 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.
Starting point is 00:40:10 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.
Starting point is 00:40:45 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.
Starting point is 00:41:26 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
Starting point is 00:42:03 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
Starting point is 00:42:25 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.
Starting point is 00:42:59 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.
Starting point is 00:43:25 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?
Starting point is 00:43:55 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.
Starting point is 00:44:03 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.
Starting point is 00:44:31 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.
Starting point is 00:44:52 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.
Starting point is 00:45:36 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.
Starting point is 00:46:08 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.
Starting point is 00:46:40 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.
Starting point is 00:47:41 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.
Starting point is 00:48:14 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,
Starting point is 00:48:50 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.
Starting point is 00:49:33 Well. Or high. Okay. All right. All right. No spoilers. All right. All right.
Starting point is 00:49:38 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?
Starting point is 00:49:52 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?
Starting point is 00:50:16 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
Starting point is 00:50:52 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.
Starting point is 00:51:08 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.
Starting point is 00:51:50 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,
Starting point is 00:52:10 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.
Starting point is 00:52:28 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.
Starting point is 00:53:00 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.
Starting point is 00:53:35 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?
Starting point is 00:53:59 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.
Starting point is 00:54:29 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.
Starting point is 00:54:50 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.
Starting point is 00:55:43 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.
Starting point is 00:56:18 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.
Starting point is 00:56:37 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.
Starting point is 00:57:04 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,
Starting point is 00:57:23 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.
Starting point is 00:57:43 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.
Starting point is 00:57:57 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.
Starting point is 00:58:17 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
Starting point is 00:58:58 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?
Starting point is 00:59:27 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.
Starting point is 00:59:53 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
Starting point is 01:00:26 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.
Starting point is 01:01:01 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,
Starting point is 01:01:18 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
Starting point is 01:01:52 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.
Starting point is 01:02:17 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.
Starting point is 01:02:45 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,
Starting point is 01:03:14 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,
Starting point is 01:03:50 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.
Starting point is 01:04:25 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.
Starting point is 01:04:49 Cool. Well, thanks everyone for joining us.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.