I’m preparing some slides to explain how to write better code with C++11/14, and I wanted to start from the last thing I wrote about here, the use of keywords final and override. The scope of my previous post, albeit a bit cryptic, was to show how those keywords are context-sensitive, so you can also use  final and override as type names, as …

Continue reading Final & Override again

namespace override { class override { }; class override_final { ::override::override override; public: virtual ::override::override & final() { return override; } }; } namespace final { class final final : public override::override { }; class final_override final : public override::override_final { ::final::final override; public: ::final::final & final() override final { return override; } }; } …

Continue reading Please, use final and override!

In these days I’m porting a library from Qt4 to Qt5, and here’s how sticking to C++11 syntax has helped me catching a subtle porting problem. I had a class subclassing QTcpServer, overriding a virtual method with this syntax: void incomingConnection(int descriptor) override; Specifying the method as override  was enough to discover a breaking change in …

Continue reading Override and errors

Two days ago I was asked to have a look at a nonworking piece of code, based on boost::program_options, which went like this: options_description desc(“Usage”); desc.add_options() (“host,h”, value<string>(), “The host.”) (“file,f”, value<string>(), “This is the file.”); (“mode,m”, value<string>(), “The mode.”); If you don’t recognise the syntax, know that add_options() method of options_description returns a builder object (options_description_easy_init), with an operator () taking three parameters, which …

Continue reading Funny bug #20150127