| ▲ | Fiveplus 11 hours ago | ||||||||||||||||||||||||||||
The reason performance-noexcept-move-constructor is not enabled by default is likely because blindly applying noexcept is dangerous if the underlying logic isn't actually exception-free. If you let clang-tidy slap noexcept on a move constructor that does end up throwing (perhaps because it calls into a legacy member or allocates memory internally), the runtime behavior changes from caught exception to std::terminate(). | |||||||||||||||||||||||||||||
| ▲ | HarHarVeryFunny 7 hours ago | parent | next [-] | ||||||||||||||||||||||||||||
The documentations seems to say that option only causes the compiler to issue a warning when move constructors are not marked noexcept - it doesn't override anything. https://clang.llvm.org/extra/clang-tidy/checks/performance/n... constructor.html Note that the way std::vector (and other STL containers) require noexcept move constructors for reallocation is by using template matching, and of course any other code might be doing this too, so having a compiler option that forced a constructor (or anything) to have a type signature different than the way it was declared would be a pretty dangerous thing to do since it'd be hard to know what the consequences would be. | |||||||||||||||||||||||||||||
| ▲ | dbcpp 8 hours ago | parent | prev | next [-] | ||||||||||||||||||||||||||||
I would argue performance-noexcept-move-constructor should always be on. Move constructors should almost always be noexcept since they typically just move pointers around and don't do allocations normally. | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
| ▲ | immibis 10 hours ago | parent | prev | next [-] | ||||||||||||||||||||||||||||
clang-tidy checks but doesn't change things for you. Since you can also put noexcept(false) to indicate something throws exceptions and you didn't just forget to mark it noexcept, it's not a bad policy to say every move constructor should have a noexcept marker. | |||||||||||||||||||||||||||||
| ▲ | phkahler 10 hours ago | parent | prev [-] | ||||||||||||||||||||||||||||
Exceptions should never be enabled by default. We live in a 64bit world so allocations failing indicates some other problem. | |||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||