advanced

Handling errors is canceling operations—Andrzej Krzemieński

Understand why it is done that way.

Handling errors is canceling operations

by Andrzej Krzemieński

From the article:

I actually covered this topic before, in this post, but given my recent experience I feel it needs reiterating and a bit of restructuring. It boils down to the observation that any error handling I have encountered — be it error codes, errno, exceptions, error monad — is about canceling operations that depend, directly or indirectly, on the function that reported failure. This has some consequences on how we look at our program flow and what principles we should follow when responding to failures in our programs...

Submit your talk to Meeting C++ 2019!

The call for submissions is open for Meeting C++ 2019!

New speakers are welcome to submit as there is a dedicated track for this, start speaking at Meeting C++!

Submit your talk to Meeting C++ 2019!

by Jens Weller

From the article:

When Meeting C++ 2019 was announced in the begin of April, there was already a hint that you could submit your talks. And so far a few have done so. Now its time for an official news entry. Submit your talk to Meeting C++ 2019! This year its the 8th edition of Meeting C++!

Speaking at Meeting C++ is a fun experience, you get to attend the speakers dinner, attend the full conference for free and enjoy the luxurious Hotelrooms the Andels offers from Wednesday to Saturday! You can look at last years schedule to get a feel for what your competition might talk about, but have in mind that you don't see the talks that were not submitted! If you want to talk about a C++ topic that wasn't covered yet, or have a unique idea for your talk, please submit! Speakers don't need to buy a ticket and the conference has a contingent of rooms available for speakers & staff.

Template meta-functions for detecting template instantiation—Ivan Čukić

Templates are great.

Template meta-functions for detecting template instantiation

by Ivan Čukić

From the article:

I’ve been playing around with type meta-tagging for my Voy reactive streams library (more on that some other time) and realized how useful it is to be able to check whether a given type is an instantiation of some class template, so I decided to write a short post about it...

A gentle introduction to jump threading optimizations—Aldy Hernandez

Your complier does magic.

A gentle introduction to jump threading optimizations

by Aldy Hernandez

From the article:

As part of the GCC developers‘ on-demand range work for GCC 10, I’ve been playing with improving the backward jump threader so it can thread paths that are range-dependent. This, in turn, had me looking at the jump threader, which is a part of the compiler I’ve been carefully avoiding for years. If, like me, you’re curious about compiler optimizations, but are jump-threading-agnostic, perhaps you’ll be interested in this short introduction...

Quick Q: Pointer to class data member “::*”

Quick A: a pointer that lets you access the value of the member of an instance.

Recently on SO:

Pointer to class data member “::*”

It's a "pointer to member" - the following code illustrates its use:

#include <iostream>
using namespace std;

class Car
{
    public:
    int speed;
};

int main()
{
    int Car::*pSpeed = &Car::speed;

    Car c1;
    c1.speed = 1;       // direct access
    cout << "speed is " << c1.speed << endl;
    c1.*pSpeed = 2;     // access via pointer to member
    cout << "speed is " << c1.speed << endl;
    return 0;
}

As to why you would want to do that, well it gives you another level of indirection that can solve some tricky problems. But to be honest, I've never had to use them in my own code.

Edit: I can't think off-hand of a convincing use for pointers to member data. Pointer to member functions can be used in pluggable architectures, but once again producing an example in a small space defeats me. The following is my best (untested) try - an Apply function that would do some pre &post processing before applying a user-selected member function to an object:

void Apply( SomeClass * c, void (SomeClass::*func)() ) {
    // do hefty pre-call processing
    (c->*func)();  // call user specified function
    // do hefty post-call processing
}

The parentheses around c->*func are necessary because the ->* operator has lower precedence than the function call operator.

Understanding C++ Modules: Part 1: Hello Modules, and Module Units—Colby Pike

Complex, but useful!

Understanding C++ Modules: Part 1: Hello Modules, and Module Units

by Colby Pike

From the article:

My previous posts on modules have received a lot of attention. I’m happy that I’ve been able to kick-start a lot of conversation, but I’ve also seen that a large part of the community is still unclear on what modules actually are.

There is a lot of ground to cover. I can’t do it all in one sitting, and I doubt you’d want to read the entire thing in one go. I’ll be breaking this up, starting at the most high-level aspects and drilling down over time. I intend these posts will clarify and discuss what modules are, what they can do, and what they are intended to do, what they cannot do, and how they are used...