「view this page in B3 βῆτα server」

Revisions №62279

branch: rosetta:main 「№62279」
Commited by: lyskov-ai
GitHub commit link: 「bf493c8ec5775489」
Difference from previous tested commit:  code diff
Commit date: 2026-07-14 17:09:14
linux.clang linux.gcc linux.srlz mac.clang
debug
release
unit
mac.clang.python38.PyRosetta.unit ubuntu.clang.cxx11thread.serialization.python38.PyRosetta.unit mpi mpi.serialization m1.clang.cxx11thread.serialization.build.debug m1.clang.python313.build.debug build.header build.levels build.ninja_debug beautification code_quality.cppcheck code_quality.merge_size serialization code_quality.submodule_regression integration.addsan integration.mpi integration.release_debug integration.tensorflow integration.thread integration.torch integration performance profile m1.clang.python310.release.PyRosetta.MinSizeRel mac.clang.python311.release.PyRosetta.MinSizeRel scientific.sb_ref2015_loop_modeling_ccd_12res linux.clang.score linux.gcc.score mac.clang.score scripts.pyrosetta scripts.rosetta.parse scripts.rosetta.validate scripts.rosetta.verify util.apps windows.build.debug windows.build.release

Apply Rule of Zero to empty destructors across core/ (#706) ## Summary Remove trivially empty (`~X() {}`) or `= default;`-bodied destructors across `core/`, **deleting the declaration outright** rather than re-declaring it as `= default` in the header. The now-redundant out-of-line `.cc` definitions are removed as well. Per @roccomoretti's review, two corrections to the original approach: 1. **`~X() override = default;` is unnecessary.** For every derived class here the base already declares a virtual destructor, so the destructor is virtual by inheritance whether or not it is declared — the explicit declaration bought nothing. Omitting it is the actual Rule of Zero: it keeps the destructor virtual (inherited) and drops the boilerplate. 2. **Defaulting the destructor does *not* restore the implicit move members.** A `~X() = default;` destructor is still *user-declared*, which suppresses the implicit move constructor/assignment exactly as a user-provided one would. (An earlier version of this description wrongly claimed defaulting "unlocks" moves.) Only omitting the destructor entirely lets the implicit moves be generated — and then only for classes with no other user-declared special members. Two classes are polymorphic bases that need an explicitly-declared virtual destructor and therefore **keep `virtual ~X() = default;`**: `LKHBondInfo` and `HBondInfo`. ## Affected sibling groups - `core/conformation/membrane/{AqueousPoreParameters, ImplicitLipidInfo, MembraneGeometry, MembraneInfo}` and `membrane_geometry/{Bicelle, DoubleVesicle, Slab, Vesicle}` — 8 classes - `core/conformation/parametric/{Boolean, Real, RealVector, Size, SizeVector}ValuedParameter` — 5 classes - `core/io/silent/SilentFileData::{iterator, const_iterator}` — inline empty dtors removed - `core/pack/interaction_graph/RotamerDots.{hh,cc}` — `DotSphere`, `RotamerDots`, `RotamerDotsCache`, `InvRotamerDots` - `core/scoring/etable/EtableEnergy.{hh,cc}` — `EtableEvaluator`, `AnalyticEtableEvaluator`, `TableLookupEvaluator` - `core/scoring/hbonds/graph/HBondInfo.hh` — `LKHBondInfo`, `HBondInfo` kept as `virtual ~X() = default;` (polymorphic roots); also removed an unused user-defined empty copy ctor on `LKHBondInfo` - `core/scoring/nmr/NMRDummySpinlabelVoxelGrid.{hh,cc}` — `VoxelGridPoint`, `NMRDummySpinlabelAtom`, `VoxelGridPoint_AA`, `NMRDummySpinlabelVoxelGrid` - `core/scoring/sc/MolecularSurfaceCalculator::Atom` - `core/energy_methods/SAXSEnergy`

...
Test: ubuntu.gcc.integration.addsan

Failed sub-tests (click for more details):
ligand_dock_ensemble
Test: linux.gcc.mpi.serialization.integration.mpi

Failed sub-tests (click for more details):
replica_docking
Test: mac.clang.python39.integration

Failed sub-tests (click for more details):
mp_f19_relax