This always happens. You put out a shiny new release. A major one. It's got new features, overhauled design, cleanups... it's perfect.
If you're lucky you get to enjoy a few days of pride in your spotless work. And then, as more people get the new version, they start finding things. And often there's something that makes you slap your forehead: why didn't I see that?
In this case, 3 things happened:
- @tiagomalheiro-dtx found a buffer overrun. In practice it's usually just an assertion failure, but on
NDEBUGbuilds it could end up writing a zero byte past the end of a buffer. Good thing I wrote that assertion. - @cacharle ran into a build problem with Clang on Windows, and filed a very helpful ticket. That's fixed now.
- An update to
clang-tidyproduced loads and loads of new nitpicks about the code. Why can't this happen just before the release?
That third change may actually be pretty intrusive. Lots more constructors and type conversions are marked explicit now. So it's possible that you'll see compilation errors along the lines of "no known conversion from <type A> to <type B>." Most likely when you're calling a function and passing an argument that's of a different type than the actual parameter that the function expects. Previously an implicit conversion "promoted" the argument type to the parameter type, but now you have to command it explicitly.
The safety rules were pretty insistent, so I applied this change fairly broadly. Better now than after everybody's already used to the changes in 8.0, I figured. I left the implicit conversion in some cases where I felt it's completely reasonable.
I'm really sorry for the source compatibility break. It's hardly proper semantic versioning. But it was either that or leave these issues lie until 9.0, when they'd hurt more!