CppCast - News Roundup
Episode Date: March 15, 2019Rob and Jason catch up on some news at the end of a week of traveling. News Usability improvements in GCC 9 Triton is the world’s most murderous malware, and it’s spreading Counting Bugs ...in Windows Calculator Understanding C++ Modules: Part 1: Hello Modules, and Module Units Modern CMake Examples CMake 3.14.0 available for download Introduction into Logging with Loguru Little-known C++: function-try-block Links @robwirving @lefticus Sponsor Backtrace Announcing Visual Studio Extension - Integrated Crash Reporting in 5 Minutes Hosts @robwirving @lefticus
Transcript
Discussion (0)
Episode 190 of CppCast, recorded March 15th, 2019.
This episode of CppCast is sponsored by Backtrace,
the only cross-platform crash reporting solution that automates the manual effort out of debugging.
Get the context you need to resolve crashes in one interface for Linux, Windows, mobile, and gaming platforms.
Check out their new Visual Studio extension for C++,
and claim your free trial at backtrace.io slash cppcast.
In this episode, we discuss usability improvements in GCC 9.
We'll also talk more about modules.
And we'll discuss little- for C++ developers by C++ developers.
I'm your host, Rob Irving, joined by my co-host, Jason Turner.
Jason, how are you doing today? I'm alright, Rob Rob Irving. Joined by my co-host, Jason Turner. Jason,
how are you doing today? I'm all right, Rob. How are you doing? I am doing okay. Getting by. Getting by? Did you have any exciting blizzards come by your way this week? No,
but you did, right? Yeah, it was a very exciting week for me because it was, I don't know, I mean, the forecast was dead on.
They're like, the snow is going to start at 9am and it's going to be done by midnight.
And that's exactly what happened.
Like I'm looking outside and it was raining super hard and then changed to snow and then it was whiteout conditions and it was a blizzard.
And then they're like, and then the next day it will be clear.
And we actually had a special guest coming in for my meetup this week, Herb Sutter.
Oh, that's awesome.
Yes.
So that was last night.
Didn't want to cancel, but everything worked out pretty much how it was supposed to.
We ended up with the snow and everything clearing up
the airport opened up exactly on time exactly when everyone said it would and the flights were moving
again there's still a bunch of delayed flights yesterday morning because there were basically
not enough airplanes right like planes had gotten diverted so but, but yeah, so what did, uh,
what did Herb talk about at the meetup?
Um,
he gave us a sneak peek of the keynote that he will be giving at ACCU in a
few weeks.
And I don't actually know if that keynote topic is announced yet,
but you got a sneak preview of it.
Yes.
I'm assuming the topic is announced,
but I haven't been on the ACCU website to look. And now I can't find the website. What am I
missing? It's like accu.conf or something. No matter what I do, it's showing me weather.
That's not helpful. Oh, there we go. Conference.accu.org.
Yeah, that's it. Yeah. So do we know what herb's keynote is though let's see herb sutter
is listed as a speaker oh and kate gregory is also keynoting oh very nice she is presenting
at lots of conferences this year for sure yeah she is uh i don't see what the topic is though
do you want to just tell us based on what you ah here we go i just wanted to make sure that it was officially announced here that's a defragmenting c++ making exceptions more affordable
and usable and it is a uh discussion of his proposal for uh statically determined exception
stuff the same thing we've had i think charlie mentioned it when he was on the show maybe phil
nash has talked about it as well and kind of tangentially related to the work that niall has done with um expected that kind of thing so yeah
right well and since you uh mentioned herb i should mention that next week i'm going to
microsoft for the mvp summit right and we're we should have another episode out next week.
But it will probably not have you.
Because I'll probably be talking to someone.
In person.
While I'm out at Microsoft's campus.
That makes sense.
I've never been to the MVP summit.
How is it?
It's a good time.
And we should be learning all about Visual Studio 2019.
Which is coming up.
And I'll hopefully talk to a couple members. Of the C++ Visual Studio team. About is coming up. And yeah, so I'll hopefully talk to a couple of members
of the C++ Visual Studio team
about everything going on there.
That looks like it's going to be
a pretty big, exciting release.
Lots of work done on the compiler.
Looking pretty good.
Yeah, yeah, it should be good.
Okay, well, at the top of the episode,
I like treated a piece of feedback.
This week, we got a tweet.
We actually got this tweet today
from Mochik Razik saying hey cpp cast
there's a bunch of developers who are waiting for a new episode you know it's friday morning in eu
and we cannot start work without it so yeah uh this episode um i'm hopefully going to get this
out friday night uh march 15th if not early saturday morning um and yeah we just did not
have a chance to get together earlier in the week
because we both had crazy schedules this week.
So we decided to do this news episode
kind of last minute on Friday.
But try to keep things moving.
Yeah, but we should get back
to more normal scheduling after next week.
Like I said, I'll be out at the MVP Summit.
I will be talking to someone out there.
And I think we already have a guest scheduled for the following week.
Very cool.
Yeah. Well, we'd love to hear your thoughts about the show as well. You can always reach out to us
on Facebook, Twitter, or email us at feedback at speakcast.com. And don't forget to leave us
a review on iTunes. So today we have several articles to go over, and this first one is from the Red Hat blog and its usability improvements in GCC 9.
They are doing some serious updates to the way we've been reporting errors
for forever is just writing out to the command line and you know just line by line statements
which uh you know programs might need to parse if you're you know using jenkins or something like
that you're probably parsing those errors i've written this code at least twice myself sure
to parse these things so with gcc9 they're making a new output format for diagnostics
to output json that could be really handy it could be really handy just being able to spit out
json it's already parsed for you and uh you know it makes sense i'm surprised
no one else has thought of this
earlier it's 2019 everyone loves json
it's like a usable version of xml or something yeah yeah exactly
there's got to be some other compilers or tools or something that output like this
i guess i've never really thought about it though maybe russ does
maybe haskell i don't know some of the other programming languages i mean the author at least
doesn't make note of anyone else who's doing this you know right he makes it sound like it was just
an idea he had while working on this and you know if clang or visual studio are doing it i'm not
aware of it yeah i agree yeah i will say for a bit a bit of uh history i was made aware
of this particular article from my cousin who was partially responsible for getting better error
error output from the rust compiler a few years ago when he was working with that team oh okay
and he saw this article come up and it's it's very much related to the same kind of work that
he did a couple years ago i mean stylistically and everything it's it's very much related to the same kind of work that he did a couple years ago
i mean stylistically and everything it's it's great to see this kind of thing propagating
yeah well aside from the the json stuff what did you want to point out uh that's new and different
here with gcc9 uh most of all i mean just the error reporting right i mean like the json stuff
is cool yeah it's gotten much better so instead of just telling you no much for this operator
and you're left wondering, well, you know, why?
What's missing here?
It will actually, like, break it down and show you
this is the expression I tried to compile.
This is the thing that's missing.
Or it can give you better hints, like,
you forgot to include the string header or whatever.
Yeah.
Yeah, they have several examples here
showing how they've gotten much better
at showing the error location.
Yeah.
And then there was also some changes with how they report vectorizing.
And if they're not able to vectorize some code, they'll give you more clear, I guess not errors, but notes on why they weren't able to vectorize something.
Yeah. That looks like it could be handy. Yeah. Those are interesting ones. And sometimes like
I was recently playing with some of the optimizer diagnostic output from clang, which I've looked at
several times over the last few years. And like, I don't know, a few years ago, I felt like, oh,
this is readable, but now it keeps giving me so much more information
that now I'm like, now I don't understand
what it's trying to tell me anymore.
Right.
Okay, is there anything else you want to mention
before we move on?
I don't think so.
The fix-it hints are interesting.
Hopefully more compilers will be able to,
or IDEs will make use of these things too.
Yeah, and speaking of, if you want to test this out,
you can already get it on Godbolt.
Just select GCC trunk.
Yes, and that's a good point in general.
If you look on cppreference.com,
any C++20 feature that is currently listed as having support in GCC 9,
you can play with on godbolt.org.
Yeah. Oh, that's awesome. Very good stuff. Okay, this next article is one of those ones that will make you scared. Yes. So this is from the MIT Technology Review, and it is titled,
Triton is the world's most murderous malware and it's spreading and you may have
heard about some of this I know I you know follow politics a bit and I think I heard about
some of the stuff they're mentioning in this article and it's talking all about um malware
getting into like safety systems in um you know utility companies and stuff like that yeah how this malware could be used to critically
disrupt those systems and you know cause real harm you know it's not just like some malware
that will steal some people's data and obviously those people you know it's really tough to lose
your your data and get hacked into but um this could like you know kill people. It's scary.
And I think they pointed to one example, at least,
where they're saying there were hackers who went into... What kind of company was it in Ukraine right before Russia attacked, right?
I don't know. Let's see.
I got physical.
Yeah, Russian hackers in 2016 striked at Ukraine's power grid.
That's... yeah. Yeah. about that yeah russian hackers in 2016 striked at ukraine's power grid that's yeah uh yeah this one of the things that stood out to me on here is it says that part of how they were able to get
make use of this malware is by finding a zero-day vulnerability unknown bug in the firmware for this
uh safety hardware system safety check check. What is it called?
Disable safety systems.
Okay, so it's a particular piece of hardware
that's designed to have safety systems, right?
But there's a zero-day vulnerability in it.
And one of the things that's just becoming
more and more important, I'm noticing as I am teaching,
is telling people to run fuzz testing against their products.
Because you don't know.
Like you might be thinking, I'm writing this piece of software for a controlled environment.
It's going in a factory.
No one will have access to that network.
But someone does gain access to the network.
And then they start sniffing the network looking for devices that they might
hack find your device that you thought was always going to be in a controlled environment
and now it's no longer in a controlled and trusted environment they send a few you know rogue packets
at it and have gained access to the device somehow by exploiting some stack overflow or something. So you have to do, I think,
I believe if you accept input from anywhere,
that doing some kind of fuzz testing
is absolutely critical.
Yeah, absolutely.
I don't know what else to say about this article.
I mean, I don't think any of this is really C++ specific,
but we all need to be thinking more and more about security
uh these days it's uh can be a scary world we live in yeah okay next one we have is uh
from pvs studio and it's counting bugs in the windows calculator i think we may have mentioned
last week that microsoft open sourced the calculator app you know i just like briefly mentioned it like it didn't end up in the news officially or anything right so uh pvs studio um
they've we've gone through a couple of these articles that they've done which are pretty
cool where they just go through an open source project and uh using their analyzer find a bunch
of bugs um and yeah some of these are surprising that you would find some of these in an app that
you know literally everyone who's used windows is probably used right i mean it's almost as
you know widely used as notepad i would imagine probably yeah i mean i pop up the calculator app
all the time yeah um and some of them yeah i'm surprised. There was one where they're doing a character array
and comparing it to another character literal
instead of doing a string comparison
or using WCSMP to do the comparison,
and that would never work.
Yeah.
And since, I mean, it's kind of fun,
but I think one of the biggest surprises to me
is that it does support the C++ CLI, C++ CX extensions
from Microsoft as well.
I'm familiar with C++ CLI and CX.
I guess most of it is going to be normal-looking C++.
I wonder if they just kind of ignore some of the syntax
if they run into it and they just kind of ignore some of the syntax if they, you know,
run into it, and they just don't try to find bugs there. I'm wondering how extensive their support
is for CLI and CX. To be perfectly honest, I don't even know what the difference is at all,
except if I see a caret after a type, then I know that it's not normal C++. Other than that?
Other than that, you know, if you're newing an than that? Other than that, if you're
newing an object with C++ CLI
and you're newing a managed object,
you're using GC new.
It's garbage collected new.
That sounds exciting.
Yeah, but there aren't a lot
of very obvious differences between
C++ CLI and pure C++.
Okay.
I know PVS Studio has been a sponsor of the show.
I didn't pick this article because they were a sponsor, just for the record,
but I thought some of these things were fun.
And also, you know, just kind of interesting,
Microsoft open sources a project and then immediately the entire world pounces on it.
I mean, it's the calculator, right?
Right.
But there's a lot of
interesting checks in here where it can find like copy paste bugs and stuff. And it's,
it's looks like a pretty good tool. Yeah, definitely. Was there any other like specific
bugs you want to point to? There was one of them that I was really impressed that it found.
I'm going to attempt to find it right now.
It's two different functions that have two different names, but the exact same body.
And so I was able to warn that these functions are probably written incorrectly.
Oh, convert and convert back?
Yeah, yeah, that's what it was.
I'm like, I'm impressed.
Yeah. It makes you a little afraid sometimes like
if to all our listeners out there theoretically that's who we're talking to right now anyhow right
right um if you've never run a static analysis on your project or if you are just using default
warning options like you know w all or something on gCC or W3, like that's, I think is the default on a new
project on Visual Studio today. And then you turn some of this stuff on, it can be scary.
Yeah.
You're like, how's my project ever worked?
Right, right. Everyone should definitely use some static analysis. You know, PVS Studio is
definitely a great option, but there's plenty of other ones out there too.
Yeah.
Everyone should use one, at least one.
Yeah.
I want to interrupt the discussion for just a moment to bring you a word
from our sponsors. Backtrace is
the only cross-platform crash and exception
reporting solution that automates all the manual
work needed to capture, symbolicate,
dedupe, classify, prioritize,
and investigate crashes in one interface.
Backtrace customers reduce engineering
team time spent on figuring out what
crashed, why, and whether it even matters by half or more. At the time of error, Backtrace customers reduced engineering team time spent on figuring out what crashed, why,
and whether it even matters by half or more.
At the time of error, Backtrace jumps into action, capturing detailed dumps of app environmental state.
It then analyzes process memory and executable code to classify errors and highlight important
signals such as heap corruption, malware, and much more.
Whether you work on Linux, Windows, mobile, or gaming platforms, Backtrace can take
pain out of crash handling. Check out their new Visual Studio extension for C++ developers.
Companies like Fastly, Amazon, and Comcast use Backtrace to improve software stability.
It's free to try, minutes to set up, with no commitment necessary.
Check them out at backtrace.io.cppcast.
Okay, next one. I really like this article. There's another one
from Vector Bull. I think we talked about one of his
last week as well,
which is also on the topic of modules.
We should get this author on at some point,
yeah? We should. I don't know his actual
name, do you? No.
I feel like I'm supposed to,
but...
I might try to see if he has
an about page here. But this is Understanding C++ Modules Part 1, Hello Modules and Units. And, you know, we've talked about modules so much on the show, but I feel like after reading through this article, I understand them a bit better now.
Yeah. them a bit better now yeah yeah so this goes into details about you know how you export a module
how module partitions work what the difference is between i was in an implementation unit and
what was the other thing that it could be there were different types of module units
implementation partition and interface partition right module partition i have to be perfectly
honest i didn't get all the way through this one either but this article i mean well i i thought
it was a really really good one he's got a bunch of pretty simple uh code examples where he shows
different ways that you can export and import modules um you know if you have lots of code you can split it up into these uh partitions so
the partitions are not going to be like his example is using these uh speech functions
so a module partition isn't going to be like speech.english and speech.spanish but it's actually
speech um semicolon english and spanish and you when you import, you would never write import module speech semicolon English.
It will take care of that for you.
You just import module speech and it'll gather up all of those partitions and import them all.
Okay. Interesting.
But I was definitely not aware of how that could work before reading this.
Yeah. And I think he also goes into how, you know,
with other languages that use modules,
we're used to seeing something like, you know,
std.vector as an import maybe.
And that's not what we're going to have with C++.
Like the dot is a meaningless thing with our modules.
Yeah, multiple identifiers separated by optional dots.
Right.
But it's all still just one string.
Right.
But if you want to split up your, you know, if you're making a library and you're making
exporting them as modules, you could definitely follow that as a naming convention.
It's just not like enforceable.
Right.
I was also stood out to
me and i think i've seen someone else mention this but some of the the import like import is still
used even for older things like even if i will like today iostream or whatever it's not going
to be a module when we get c++ 20. You can still use import, angle bracket,
iostream, angle bracket.
Yeah, I was a little confused about that one.
So is it still doing the same thing as just an include?
I think it effectively has to,
but to be fair, yeah, I'm not 100% sure either.
Right, okay.
But yeah, I was really pleased to read through this article. I feel
like I definitely learned a bit more about modules and I'll have to keep looking for the
rest of his series. I don't think he said how many parts he plans on writing, but this is part one.
Yeah, this is part one. And I guess for our listeners who haven't been paying attention, his articles keep coming up, right?
It was January, C++ modules might be dead on arrival.
We discussed that one.
And then in March, are C++ modules dead on arrival?
That was immediately after Kona.
And now, a week later, understanding modules.
Basically, like, what did we get?
Because the author is finding that
most people have a misconception
about what authors are and what they will give us.
Right, right.
Okay, next one is modern CMake examples.
And I know we talked a while ago
about how someone was going to put together
a set of CMake examples. Is this the same person?
Do you know? I don't know. It's a username on Twitter that I, excuse me, username on GitHub
that I recognize. I'm not sure, but this is quite the collection. Yeah. So he starts off by just
having a great collection of other CMake articles and documentation, even some YouTube posts and Stack Overflow Q&As, all on the topic of CMake.
Yeah.
Right?
All on the topic of CMake.
Yeah.
But then he also has a whole bunch of examples.
Did you go through many of these examples?
You know a lot more about CMake than I do.
Yeah.
I clicked on a few of them
and I saw some of the comments on Reddit
I think the actual link that we have for this one is the Reddit link
and then that links to the GitHub page
but people in the Reddit comment like
I could never figure out the right way of installing a header-only library
thanks for that
so if you look in here there's two articles
on creating and consuming header-only library thanks for that so if you look in here there's like two articles on header
creating and consuming header-only libraries from like two different authors so it's yeah it's
all collected one place some of these things i think yeah relatively old over a year old
as the community was really starting to build awareness of the fact that we can be using cmake
better so it's great to see them all in one place.
Yeah, it looks like it's a really good collection of resources.
And on the topic of CMake, version 3.14 is now available for download.
And it looks like there's a couple changes they made that are worth talking about.
They're deprecating support for Windows XP and Vista.
Yeah, I saw that and I'm like,
I did not know that you still supported XP.
But to be fair, for a build tool,
you probably want as long a life as you can squeeze out of it.
Yeah, it makes sense.
And while they're deprecating support for that,
they're also adding support for a Visual studio 2019 base generator and that's based on
the preview 4 since the official release is not out yet right that'll be handy and what you skipped
right over the support for cross compiling for ios tv os and watch os using simple tool chain files
last time i had to do iOS development,
I wish I wasn't doing iOS development.
The CMake support was that bad just for iOS?
No, trying to even use CMake would have been basically impossible.
You had to use Xcode.
And I swear, every time I came back to that project,
because I was working on it as a contractor,
it would be like once every three months or something. Every time I came back to that project, because I was working on it as a contractor, it'd be like once every three months or something. Every time I came back to that project, I had to delete and recreate all of my keys from scratch every single time. And it would take me like an hour to two hours to get the project so that I could copy it to my, at the time, iPod touch to test it and i found it so incredibly frustrating if i could have had a
build system that i felt like i was in more control of i would have been very happy it's it's been a
long time since i wore the like build engineer hat but i used to work on a multi on a cross-platform
project that we didn't use cmake but we used Visual Studio as our main environment, but we worked on Android and iOS as well.
And we would modify the iOS project based on if we added a new file in Visual Studio.
And so I'm somewhat familiar with the layout of the Xcode project files, and it is a mess.
So let me get that right.
So if you added something in Visual Studio, now would you try to do that in an automated way?
You would like parse the Visual Studio project
and then insert that into the RRS project.
Exactly.
That sounds both better than doing it by hand
and terrifying and terrible at the same time.
Yeah, you're right.
It was definitely terrifying and terrible.
But it was better than having to maintain all three separately.
We should have been using CMake, but we were not.
Are the projects you work on today multi-platform?
Yes, but not as cross-platform as the previous stuff I was working on.
That project was almost 99% shared C++ code,
and you just needed a different build environment
for each platform.
What I'm working on now,
the application layer is different,
and we share common libraries.
Do you use CMake or whatever?
I'm not currently using CMake, but I'm not.
Okay.
Yeah.
Just curious.
All right.
Is there anything else you want to talk about
with 3.14, though?
There's a couple of random things here that stood out to me and i feel like i don't fully like immediately
understand the implication here but it made me go oh like install targets command learn how to
install to an appropriate default directory for a given target type based on system variables
basically like that's interesting i'm gonna going to have to, like, play with that.
Because sometimes, depending on the nature
of your CMake project,
the glue that you
write for installs to work
correctly on multiple platforms
is almost as
complicated as the actual
building, right? And with modern
CMake, maybe more complicated
to pick all the right directories and
everything. So that I'm curious about. And then I also noticed that the little appreciated
command line tool, like if you, so you have a CMake project, and you type CMake to actually
generate a build file for whatever generator you want. So if you're on Unix, you can say GNU make file or make files or Ninja. And if you're on Windows, you might generate Visual
Studio or GNU make files if you want to compile from one of the GNU Unix environments on Windows,
right? Or you might say, I want an Xcode generator or whatever.
So you can do CMake to configure the project,
then CMake dash dash build,
and it will run the appropriate build command
regardless of what generator you just chose.
And that's really, really helpful
if you're writing build scripts,
like for your CI or something. you don't have to think about
what environment i currently on just do cmake dash dash build and it usually does exactly what
you want it to do sometimes like choosing how to pass the number of parallel builds that you want
to run can be a little weird because if you're on unix it might be like cmake dash dash build space
dash dash space dash j7 because you want to patch the day seven to the make command um if you're using make if you're
using ninja it will automatically use all the cores on the system so anyhow the dash dash build
command learned dash v so you can have it generate verbose build output when you want that.
Sometimes you want that.
If things are going wrong at link time, you need to see the verbose output and be like,
oh, it's missing that.a file right here.
I see what went wrong.
It's rare, but sometimes you need that.
And otherwise doing that from the command line is like setting an environment variable to say verbose equals one and then running make.
Yeah, that sounds like it should be helpful.
Yeah.
Okay.
And then the next one we have is,
uh,
introduction into logging with loggeroo.
Loggeroo.
Loggeroo.
And this is a header only,
uh,
logging library that I don't think I've heard of before.
I have not.
Yeah.
But it looks like it's pretty easy to set up and use.
And yeah, it looks like it's pretty easy to use Logging Library.
Yeah, and it uses format.
Yeah.
It's coming.
The future is here.
We will know how to actually write formatted output safely in C++ soon.
Yeah, that'll be nice.
Now, did this example bother you at all? The first
three lines of it bothered me slightly, Rob. Yeah, include logger HPP and then include logger CPP.
Why are they doing that? I'm assuming so that you can use it in header-only mode versus possibly
you could compile them separately, or you could do it this way in header-only mode. But I just like something about seeing pound include a CBP file.
Yeah, I don't like it.
I don't like it, right?
But there's technically nothing wrong with it.
Yeah.
Yeah, I guess not.
But yeah, otherwise it looks like a nice, clean, simple logger.
Yeah.
One thing I liked about this one is it gives you uh the output includes the thread name or id
something that's probably pretty handy to have yeah okay and then uh the last one we have uh
is about a c++ feature that i was definitely not aware of function try block and at first, the first example is using a try and catch block with the main function, but without any brackets around main.
So you just have int main immediately followed by a try and then the try block and the catch block.
And I definitely didn't know you could do that.
And he kind of points out, you know, there's really no reason why you would want to do that. It's effectively the same as just writing int main brackets and
then the try catch inside those brackets. For main, yeah. Right. But then he points out, you know,
in addition to using this for a function, you can use it for a constructor, which I was definitely
not aware of. It is the only way to catch an exception thrown during the construction of a member variable.
Right.
Very interesting.
Now, what's worth pointing out is even though using this, you can catch an exception that
happens during the construction, but you can't actually recover from the exception.
Right.
It's required to automatically rethrow it, right?
You either don't do anything, in which case it'll rethrow the same exception for you.
But if you want to throw a different exception from your constructor try catch block,
then you could throw a different exception, but you have to throw something. Yeah.
Right. Now, one thing on here that I never even crossed my mind was in the main example that you started with, the author sounds like would like it if that try block around main would be able to catch an exception throwing during the initialization of static objects.
Oh. static objects. But it doesn't. It doesn't do that. But when I saw that potential example,
I'm like, oh, that would be really cool. But no, it's not an option.
The other thing that I saw is I'd never considered putting it on a destructor.
Now, granted, if you throw an exception during destruction, you probably have other problems
in your code. But I have written code, perhaps ill conceived code,
where this would have actually potentially been useful to me, because it was possible that my
destructor could have thrown an exception. Okay. It was a parser and I and I was using RAII
technique. So at the end of the parsing, I would call the destructor and any remaining tokens would be handled at that moment.
So it was like processing a token stream.
But if processing the rest of those tokens meant an invalid parse input, then I was trying to throw an exception during my destructor.
And that got really nasty.
And then I looked at this and I wondered, maybe that could have cleaned up that situation.
Or maybe it was just a nil- a no conceived idea in the first place.
We should mention, you know, a good use case for doing this for for adding a function try block to your constructors would be, you know, for logging purposes. So you could log, you know, why uh object is failing to construct that sort of thing
right yeah okay well i think that's all we have for today right jason yeah i think so yeah so uh
as we mentioned at the beginning of the show uh next week i will be out in seattle and i'll be
talking to some microsoft folks and then we'll be back the following week with a regular episode. And if I could make just like two random announcements. Sure.
In April here coming up, I will be speaking at the Munich C++ users group. Now, there's already,
it's full, but you can still check it out. Put your name on the waiting list if people cancel or whatever.
That's April 11th in Munich.
And then, obviously, Core C++, I'll be speaking, giving the keynote there.
We've mentioned that a few times.
So that's Tel Aviv coming up in May, which feels awfully soon to me at the moment.
Yeah, it does.
This year is going by real fast.
Okay.
Thanks for listening, everybody.
Thanks. Thanks so much for listening in as we chat about c++ we'd love to hear what you think of the podcast please
let us know if we're discussing the stuff you're interested in or if you have a suggestion for a
topic we'd love to hear about that too you can email all your thoughts to feedback at cppcast.com
we'd also appreciate if you can like cppcast on facebook and follow cppcast.com. We'd also appreciate if you can like CppCast on Facebook and follow CppCast on
Twitter. You can also follow me at Rob W. Irving and Jason at Lefticus on Twitter. We'd also like
to thank all our patrons who help support the show through Patreon. If you'd like to support
us on Patreon, you can do so at patreon.com slash cppcast. And of course, you can find all that info
and the show notes on the podcast website at cppcast.com.
Theme music for this episode is provided by podcastthemes.com.