******************************** Classes with Only Static Methods ******************************** :Rule ID: ``static_only_class`` :Severity: high Classes that consist only of static functions and declarations are hacked namespaces. They are bad practice and must not exist. Scope and Exceptions ==================== A class with a virtual destructor is a polymorphic interface, even if its remaining methods are static factories. The scanner does not report these classes. Derived classes are also excluded because their inherited non-static behavior may not be visible in the declaration. Correct Solution ================ * A collection of free functions can be put into a regular header with proper unique naming in its namespace. * If the functions all share an explicit domain that would make their names repetitive, putting all functions in this header into a special namespace such as ``erbsland::::impl::`` can make sense. At the usage location, this namespace may be imported for more readable code. * Usually, this is a symptom of bad design. Functions should be arranged around data. Data can be values the functions operate on or simply configuration. For example, free functions such as ``doSomething(config, value)`` could be arranged around ``config``. Mechanical Detection ==================== The scanner reports namespace-scope classes with static members but no instance state or non-static behavior.