This is handy! When a class member has a default initializer it is redundent to initialize it in the member list.
But, because some types don't have default initializers, forgetting to initialize them in the member list (or using c++11 initialization in the class definition) can lead to serious trouble like mapbox/wagyu#69 - refs mapbox/wagyu#70.
-Weffc++ - useful when building with g++ (does not do much with clang++). With g++ it can catch uninitialized class members and prevent crashes like mapbox/wagyu#69 - refs mapbox/wagyu#70
Problem
-Weffc++ will warn on all class members not explicitly initialized in the initializer list
clang-tidy will automatically remove variables from the initializer list that have default constructors
So, the two will fight: causing each other warnings. For this reason I think we should likely:
let clang-tidy win
recommend no longer using g++ with -Weffc++
figure out what alternative way we can catch when members, without default initializers, are uninitialized (without needing to use -Weffc++). Maybe another clang-tidy check?
Context
Recent versions of clang-tidy added
readability-redundant-member-init
: https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-member-init.htmlThis is handy! When a class member has a default initializer it is redundent to initialize it in the member list.
But, because some types don't have default initializers, forgetting to initialize them in the member list (or using c++11 initialization in the class definition) can lead to serious trouble like mapbox/wagyu#69 - refs mapbox/wagyu#70.
So, this is the reason, at https://github.com/mapbox/cpp/issues/37#issuecomment-336200744, that we recommend using g++ and the
-Weffc++
flag because it can catch this (note, clang++ plus-Weffc++
cannot):Problem
-Weffc++
will warn on all class members not explicitly initialized in the initializer listclang-tidy
will automatically remove variables from the initializer list that have default constructorsSo, the two will fight: causing each other warnings. For this reason I think we should likely:
-Weffc++
-Weffc++
). Maybe anotherclang-tidy
check?