diff --git a/.clang-format b/.clang-format
index 7192e55..cab3139 100644
--- a/.clang-format
+++ b/.clang-format
@@ -33,15 +33,15 @@
   BeforeCatch:     true
   BeforeElse:      true
   IndentBraces:    false
-  SplitEmptyFunction:   true
-  SplitEmptyRecord:     true
-  SplitEmptyNamespace:  true
+  SplitEmptyFunction:   false
+  SplitEmptyRecord:     false
+  SplitEmptyNamespace:  false
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
 BreakInheritanceList: AfterColon
-BreakStringLiterals: true
+BreakStringLiterals: false
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
@@ -112,3 +112,4 @@
 TabWidth:        4
 UseTab:          Never
 ...
+
diff --git a/device.hpp b/device.hpp
index 7acd132..eee9b9b 100644
--- a/device.hpp
+++ b/device.hpp
@@ -31,8 +31,7 @@
      * @param inst - the device instance
      */
     Device(const std::string& name, size_t inst) : name(name), instance(inst)
-    {
-    }
+    {}
 
     /**
      * Returns the instance number
@@ -61,8 +60,7 @@
      * is required
      */
     virtual void onFailure()
-    {
-    }
+    {}
 
     /**
      * Pure virtual function to clear faults on the device
diff --git a/device_monitor.hpp b/device_monitor.hpp
index 7960d1c..ec0151c 100644
--- a/device_monitor.hpp
+++ b/device_monitor.hpp
@@ -43,8 +43,7 @@
                   std::chrono::milliseconds i) :
         device(std::move(d)),
         timer(e, std::bind(&DeviceMonitor::analyze, this), i)
-    {
-    }
+    {}
 
     /**
      * Starts the timer to monitor the device on an interval.
diff --git a/elog-errors.hpp b/elog-errors.hpp
index f51e90f..4679713 100644
--- a/elog-errors.hpp
+++ b/elog-errors.hpp
@@ -1145,9 +1145,7 @@
 namespace Fault
 {
 namespace _Shutdown
-{
-
-} // namespace _Shutdown
+{} // namespace _Shutdown
 
 struct Shutdown
 {
@@ -1181,9 +1179,7 @@
 namespace Fault
 {
 namespace _PowerOnFailure
-{
-
-} // namespace _PowerOnFailure
+{} // namespace _PowerOnFailure
 
 struct PowerOnFailure
 {
@@ -1217,9 +1213,7 @@
 namespace Fault
 {
 namespace _ErrorCode0
-{
-
-} // namespace _ErrorCode0
+{} // namespace _ErrorCode0
 
 struct ErrorCode0
 {
@@ -1253,9 +1247,7 @@
 namespace Fault
 {
 namespace _ErrorCode1
-{
-
-} // namespace _ErrorCode1
+{} // namespace _ErrorCode1
 
 struct ErrorCode1
 {
@@ -1289,9 +1281,7 @@
 namespace Fault
 {
 namespace _ErrorCode2
-{
-
-} // namespace _ErrorCode2
+{} // namespace _ErrorCode2
 
 struct ErrorCode2
 {
@@ -1325,9 +1315,7 @@
 namespace Fault
 {
 namespace _ErrorCode3
-{
-
-} // namespace _ErrorCode3
+{} // namespace _ErrorCode3
 
 struct ErrorCode3
 {
@@ -1361,9 +1349,7 @@
 namespace Fault
 {
 namespace _ErrorCode4
-{
-
-} // namespace _ErrorCode4
+{} // namespace _ErrorCode4
 
 struct ErrorCode4
 {
@@ -1397,9 +1383,7 @@
 namespace Fault
 {
 namespace _ErrorCode5
-{
-
-} // namespace _ErrorCode5
+{} // namespace _ErrorCode5
 
 struct ErrorCode5
 {
@@ -1433,9 +1417,7 @@
 namespace Fault
 {
 namespace _ErrorCode6
-{
-
-} // namespace _ErrorCode6
+{} // namespace _ErrorCode6
 
 struct ErrorCode6
 {
@@ -1469,9 +1451,7 @@
 namespace Fault
 {
 namespace _ErrorCode7
-{
-
-} // namespace _ErrorCode7
+{} // namespace _ErrorCode7
 
 struct ErrorCode7
 {
@@ -1505,9 +1485,7 @@
 namespace Fault
 {
 namespace _ErrorCode8
-{
-
-} // namespace _ErrorCode8
+{} // namespace _ErrorCode8
 
 struct ErrorCode8
 {
@@ -1541,9 +1519,7 @@
 namespace Fault
 {
 namespace _ErrorCode9
-{
-
-} // namespace _ErrorCode9
+{} // namespace _ErrorCode9
 
 struct ErrorCode9
 {
@@ -1577,9 +1553,7 @@
 namespace Fault
 {
 namespace _ErrorCode10
-{
-
-} // namespace _ErrorCode10
+{} // namespace _ErrorCode10
 
 struct ErrorCode10
 {
@@ -1613,9 +1587,7 @@
 namespace Fault
 {
 namespace _ErrorCode11
-{
-
-} // namespace _ErrorCode11
+{} // namespace _ErrorCode11
 
 struct ErrorCode11
 {
@@ -1649,9 +1621,7 @@
 namespace Fault
 {
 namespace _ErrorCode12
-{
-
-} // namespace _ErrorCode12
+{} // namespace _ErrorCode12
 
 struct ErrorCode12
 {
@@ -1685,9 +1655,7 @@
 namespace Fault
 {
 namespace _ErrorCode13
-{
-
-} // namespace _ErrorCode13
+{} // namespace _ErrorCode13
 
 struct ErrorCode13
 {
@@ -1721,9 +1689,7 @@
 namespace Fault
 {
 namespace _ErrorCode14
-{
-
-} // namespace _ErrorCode14
+{} // namespace _ErrorCode14
 
 struct ErrorCode14
 {
@@ -1757,9 +1723,7 @@
 namespace Fault
 {
 namespace _ErrorCode15
-{
-
-} // namespace _ErrorCode15
+{} // namespace _ErrorCode15
 
 struct ErrorCode15
 {
@@ -1793,9 +1757,7 @@
 namespace Fault
 {
 namespace _ErrorCode16
-{
-
-} // namespace _ErrorCode16
+{} // namespace _ErrorCode16
 
 struct ErrorCode16
 {
@@ -1829,9 +1791,7 @@
 namespace Fault
 {
 namespace _ErrorCode17
-{
-
-} // namespace _ErrorCode17
+{} // namespace _ErrorCode17
 
 struct ErrorCode17
 {
@@ -1865,9 +1825,7 @@
 namespace Fault
 {
 namespace _ErrorCode18
-{
-
-} // namespace _ErrorCode18
+{} // namespace _ErrorCode18
 
 struct ErrorCode18
 {
@@ -1901,9 +1859,7 @@
 namespace Fault
 {
 namespace _ErrorCode19
-{
-
-} // namespace _ErrorCode19
+{} // namespace _ErrorCode19
 
 struct ErrorCode19
 {
@@ -1937,9 +1893,7 @@
 namespace Fault
 {
 namespace _ErrorCode20
-{
-
-} // namespace _ErrorCode20
+{} // namespace _ErrorCode20
 
 struct ErrorCode20
 {
@@ -1973,9 +1927,7 @@
 namespace Fault
 {
 namespace _ErrorCode21
-{
-
-} // namespace _ErrorCode21
+{} // namespace _ErrorCode21
 
 struct ErrorCode21
 {
@@ -2009,9 +1961,7 @@
 namespace Fault
 {
 namespace _ErrorCode22
-{
-
-} // namespace _ErrorCode22
+{} // namespace _ErrorCode22
 
 struct ErrorCode22
 {
@@ -2045,9 +1995,7 @@
 namespace Fault
 {
 namespace _ErrorCode23
-{
-
-} // namespace _ErrorCode23
+{} // namespace _ErrorCode23
 
 struct ErrorCode23
 {
@@ -2081,9 +2029,7 @@
 namespace Fault
 {
 namespace _ErrorCode24
-{
-
-} // namespace _ErrorCode24
+{} // namespace _ErrorCode24
 
 struct ErrorCode24
 {
@@ -2117,9 +2063,7 @@
 namespace Fault
 {
 namespace _ErrorCode25
-{
-
-} // namespace _ErrorCode25
+{} // namespace _ErrorCode25
 
 struct ErrorCode25
 {
@@ -2153,9 +2097,7 @@
 namespace Fault
 {
 namespace _ErrorCode26
-{
-
-} // namespace _ErrorCode26
+{} // namespace _ErrorCode26
 
 struct ErrorCode26
 {
@@ -2189,9 +2131,7 @@
 namespace Fault
 {
 namespace _ErrorCode27
-{
-
-} // namespace _ErrorCode27
+{} // namespace _ErrorCode27
 
 struct ErrorCode27
 {
@@ -2225,9 +2165,7 @@
 namespace Fault
 {
 namespace _ErrorCode28
-{
-
-} // namespace _ErrorCode28
+{} // namespace _ErrorCode28
 
 struct ErrorCode28
 {
@@ -2261,9 +2199,7 @@
 namespace Fault
 {
 namespace _ErrorCode29
-{
-
-} // namespace _ErrorCode29
+{} // namespace _ErrorCode29
 
 struct ErrorCode29
 {
@@ -2297,9 +2233,7 @@
 namespace Fault
 {
 namespace _ErrorCode30
-{
-
-} // namespace _ErrorCode30
+{} // namespace _ErrorCode30
 
 struct ErrorCode30
 {
@@ -2333,9 +2267,7 @@
 namespace Fault
 {
 namespace _ErrorCode31
-{
-
-} // namespace _ErrorCode31
+{} // namespace _ErrorCode31
 
 struct ErrorCode31
 {
@@ -2369,9 +2301,7 @@
 namespace Fault
 {
 namespace _ErrorCode32
-{
-
-} // namespace _ErrorCode32
+{} // namespace _ErrorCode32
 
 struct ErrorCode32
 {
@@ -2405,9 +2335,7 @@
 namespace Fault
 {
 namespace _ErrorCode33
-{
-
-} // namespace _ErrorCode33
+{} // namespace _ErrorCode33
 
 struct ErrorCode33
 {
@@ -2441,9 +2369,7 @@
 namespace Fault
 {
 namespace _ErrorCode34
-{
-
-} // namespace _ErrorCode34
+{} // namespace _ErrorCode34
 
 struct ErrorCode34
 {
@@ -2477,9 +2403,7 @@
 namespace Fault
 {
 namespace _ErrorCode35
-{
-
-} // namespace _ErrorCode35
+{} // namespace _ErrorCode35
 
 struct ErrorCode35
 {
@@ -2513,9 +2437,7 @@
 namespace Fault
 {
 namespace _ErrorCode36
-{
-
-} // namespace _ErrorCode36
+{} // namespace _ErrorCode36
 
 struct ErrorCode36
 {
diff --git a/file_descriptor.hpp b/file_descriptor.hpp
index 7929aa6..4b98aea 100644
--- a/file_descriptor.hpp
+++ b/file_descriptor.hpp
@@ -29,8 +29,7 @@
      * @param[in] fd - File descriptor
      */
     FileDescriptor(int fd) : fd(fd)
-    {
-    }
+    {}
 
     /**
      * Move constructor.
diff --git a/gpio.hpp b/gpio.hpp
index 0969995..a803113 100644
--- a/gpio.hpp
+++ b/gpio.hpp
@@ -12,8 +12,8 @@
 namespace gpio
 {
 
-typedef std::remove_reference<decltype(
-    gpiohandle_request::lineoffsets[0])>::type gpioNum_t;
+typedef std::remove_reference<
+    decltype(gpiohandle_request::lineoffsets[0])>::type gpioNum_t;
 
 typedef std::remove_reference<decltype(gpiohandle_data::values[0])>::type
     gpioValue_t;
@@ -62,8 +62,7 @@
      */
     GPIO(const std::string& device, gpioNum_t gpio, Direction direction) :
         device(device), gpio(gpio), direction(direction)
-    {
-    }
+    {}
 
     /**
      * Reads the GPIO value
diff --git a/phosphor-power-sequencer/src/power_control.cpp b/phosphor-power-sequencer/src/power_control.cpp
index 0ce46b8..931142d 100644
--- a/phosphor-power-sequencer/src/power_control.cpp
+++ b/phosphor-power-sequencer/src/power_control.cpp
@@ -59,8 +59,7 @@
 }
 
 void PowerControl::pollPgood()
-{
-}
+{}
 
 void PowerControl::setPgoodTimeout(int t)
 {
diff --git a/phosphor-power-sequencer/src/power_interface.cpp b/phosphor-power-sequencer/src/power_interface.cpp
index ed537db..13d0af6 100644
--- a/phosphor-power-sequencer/src/power_interface.cpp
+++ b/phosphor-power-sequencer/src/power_interface.cpp
@@ -35,8 +35,7 @@
 
 PowerInterface::PowerInterface(sdbusplus::bus::bus& bus, const char* path) :
     _serverInterface(bus, path, POWER_IFACE, _vtable, this)
-{
-}
+{}
 
 int PowerInterface::callbackGetPgood(sd_bus* /*bus*/, const char* /*path*/,
                                      const char* /*interface*/,
diff --git a/phosphor-power-supply/psu_manager.cpp b/phosphor-power-supply/psu_manager.cpp
index 93d1415..603c0ef 100644
--- a/phosphor-power-supply/psu_manager.cpp
+++ b/phosphor-power-supply/psu_manager.cpp
@@ -126,8 +126,7 @@
             }
         }
         catch (std::exception& e)
-        {
-        }
+        {}
     }
 
     if ((i2cbus) && (i2caddr) && (psuname) && (!psuname->empty()))
@@ -223,8 +222,7 @@
         supportedConfigs.emplace(*model, sys);
     }
     catch (std::exception& e)
-    {
-    }
+    {}
 }
 
 void PSUManager::getSystemProperties()
diff --git a/phosphor-power-supply/test/power_supply_tests.cpp b/phosphor-power-supply/test/power_supply_tests.cpp
index b298d6c..19d5203 100644
--- a/phosphor-power-supply/test/power_supply_tests.cpp
+++ b/phosphor-power-supply/test/power_supply_tests.cpp
@@ -251,8 +251,7 @@
         psu.onOffConfig(data);
     }
     catch (...)
-    {
-    }
+    {}
 
     // Test where PSU is present
     try
@@ -273,8 +272,7 @@
         psu.onOffConfig(data);
     }
     catch (...)
-    {
-    }
+    {}
 }
 
 TEST_F(PowerSupplyTests, ClearFaults)
diff --git a/phosphor-regulators/src/actions/action_environment.hpp b/phosphor-regulators/src/actions/action_environment.hpp
index 7f6c402..265a7bf 100644
--- a/phosphor-regulators/src/actions/action_environment.hpp
+++ b/phosphor-regulators/src/actions/action_environment.hpp
@@ -74,8 +74,7 @@
                                Services& services) :
         idMap{idMap},
         deviceID{deviceID}, services{services}
-    {
-    }
+    {}
 
     /**
      * Adds the specified key/value pair to the map of additional error data
diff --git a/phosphor-regulators/src/actions/and_action.hpp b/phosphor-regulators/src/actions/and_action.hpp
index f4c3fca..ceaa322 100644
--- a/phosphor-regulators/src/actions/and_action.hpp
+++ b/phosphor-regulators/src/actions/and_action.hpp
@@ -51,8 +51,7 @@
      */
     explicit AndAction(std::vector<std::unique_ptr<Action>> actions) :
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Executes the actions specified in the constructor.
diff --git a/phosphor-regulators/src/actions/compare_presence_action.hpp b/phosphor-regulators/src/actions/compare_presence_action.hpp
index f2038d1..14d92bc 100644
--- a/phosphor-regulators/src/actions/compare_presence_action.hpp
+++ b/phosphor-regulators/src/actions/compare_presence_action.hpp
@@ -50,8 +50,7 @@
      */
     explicit ComparePresenceAction(const std::string& fru, bool value) :
         fru{fru}, value{value}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/compare_vpd_action.hpp b/phosphor-regulators/src/actions/compare_vpd_action.hpp
index 8825220..110b8b5 100644
--- a/phosphor-regulators/src/actions/compare_vpd_action.hpp
+++ b/phosphor-regulators/src/actions/compare_vpd_action.hpp
@@ -57,8 +57,7 @@
                               const std::vector<uint8_t>& value) :
         fru{fru},
         keyword{keyword}, value{value}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
index a32bbdf..0459880 100644
--- a/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_compare_byte_action.hpp
@@ -58,8 +58,7 @@
                                   uint8_t mask = 0xFF) :
         reg{reg},
         value{value}, mask{mask}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp b/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
index 3f0ec83..2fdd5ff 100644
--- a/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_compare_bytes_action.hpp
@@ -60,8 +60,7 @@
                                    const std::vector<uint8_t>& values) :
         I2CCompareBytesAction(reg, values,
                               std::vector<uint8_t>(values.size(), 0xFF))
-    {
-    }
+    {}
 
     /**
      * Constructor.
diff --git a/phosphor-regulators/src/actions/i2c_write_byte_action.hpp b/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
index 99ea154..3f9e1f6 100644
--- a/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
+++ b/phosphor-regulators/src/actions/i2c_write_byte_action.hpp
@@ -57,8 +57,7 @@
                                 uint8_t mask = 0xFF) :
         reg{reg},
         value{value}, mask{mask}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/if_action.hpp b/phosphor-regulators/src/actions/if_action.hpp
index 10b2f5b..b35aa89 100644
--- a/phosphor-regulators/src/actions/if_action.hpp
+++ b/phosphor-regulators/src/actions/if_action.hpp
@@ -71,8 +71,7 @@
                           std::vector<std::unique_ptr<Action>>{}) :
         conditionAction{std::move(conditionAction)},
         thenActions{std::move(thenActions)}, elseActions{std::move(elseActions)}
-    {
-    }
+    {}
 
     /**
      * Executes the condition action specified in the constructor.
diff --git a/phosphor-regulators/src/actions/log_phase_fault_action.hpp b/phosphor-regulators/src/actions/log_phase_fault_action.hpp
index c0690b4..70c4cd0 100644
--- a/phosphor-regulators/src/actions/log_phase_fault_action.hpp
+++ b/phosphor-regulators/src/actions/log_phase_fault_action.hpp
@@ -48,8 +48,7 @@
      * @param type phase fault type
      */
     explicit LogPhaseFaultAction(PhaseFaultType type) : type{type}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/not_action.hpp b/phosphor-regulators/src/actions/not_action.hpp
index 762f5b5..b578042 100644
--- a/phosphor-regulators/src/actions/not_action.hpp
+++ b/phosphor-regulators/src/actions/not_action.hpp
@@ -50,8 +50,7 @@
      */
     explicit NotAction(std::unique_ptr<Action> action) :
         action{std::move(action)}
-    {
-    }
+    {}
 
     /**
      * Executes the action specified in the constructor.
diff --git a/phosphor-regulators/src/actions/or_action.hpp b/phosphor-regulators/src/actions/or_action.hpp
index 5dcff7a..a14b605 100644
--- a/phosphor-regulators/src/actions/or_action.hpp
+++ b/phosphor-regulators/src/actions/or_action.hpp
@@ -51,8 +51,7 @@
      */
     explicit OrAction(std::vector<std::unique_ptr<Action>> actions) :
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Executes the actions specified in the constructor.
diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
index 36df590..38c5d8f 100644
--- a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
@@ -71,8 +71,7 @@
                                    std::optional<int8_t> exponent) :
         type{type},
         command{command}, format{format}, exponent{exponent}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/run_rule_action.hpp b/phosphor-regulators/src/actions/run_rule_action.hpp
index 6cf63ac..87cd0c4 100644
--- a/phosphor-regulators/src/actions/run_rule_action.hpp
+++ b/phosphor-regulators/src/actions/run_rule_action.hpp
@@ -48,8 +48,7 @@
      * @param ruleID rule ID
      */
     explicit RunRuleAction(const std::string& ruleID) : ruleID{ruleID}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/actions/set_device_action.hpp b/phosphor-regulators/src/actions/set_device_action.hpp
index 955891e..7009cf6 100644
--- a/phosphor-regulators/src/actions/set_device_action.hpp
+++ b/phosphor-regulators/src/actions/set_device_action.hpp
@@ -47,8 +47,7 @@
      * @param deviceID device ID
      */
     explicit SetDeviceAction(const std::string& deviceID) : deviceID{deviceID}
-    {
-    }
+    {}
 
     /**
      * Executes this action.
diff --git a/phosphor-regulators/src/config_file_parser_error.hpp b/phosphor-regulators/src/config_file_parser_error.hpp
index 28db75a..9c783c5 100644
--- a/phosphor-regulators/src/config_file_parser_error.hpp
+++ b/phosphor-regulators/src/config_file_parser_error.hpp
@@ -49,8 +49,7 @@
                                    const std::string& error) :
         pathName{pathName},
         error{"ConfigFileParserError: " + pathName.string() + ": " + error}
-    {
-    }
+    {}
 
     /**
      * Returns the configuration file path name.
diff --git a/phosphor-regulators/src/configuration.hpp b/phosphor-regulators/src/configuration.hpp
index f0dd766..d0f7a44 100644
--- a/phosphor-regulators/src/configuration.hpp
+++ b/phosphor-regulators/src/configuration.hpp
@@ -74,8 +74,7 @@
                            std::vector<std::unique_ptr<Action>> actions) :
         volts{volts},
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Executes the actions to configure the specified device.
diff --git a/phosphor-regulators/src/dbus_sensors.hpp b/phosphor-regulators/src/dbus_sensors.hpp
index 229ae9f..590c960 100644
--- a/phosphor-regulators/src/dbus_sensors.hpp
+++ b/phosphor-regulators/src/dbus_sensors.hpp
@@ -52,8 +52,7 @@
      */
     explicit DBusSensors(sdbusplus::bus::bus& bus) :
         bus{bus}, manager{bus, sensorsObjectPath}
-    {
-    }
+    {}
 
     /** @copydoc Sensors::enable() */
     virtual void enable() override;
diff --git a/phosphor-regulators/src/device.hpp b/phosphor-regulators/src/device.hpp
index c45f330..af0e8ec 100644
--- a/phosphor-regulators/src/device.hpp
+++ b/phosphor-regulators/src/device.hpp
@@ -79,8 +79,7 @@
         configuration{std::move(configuration)},
         phaseFaultDetection{std::move(phaseFaultDetection)}, rails{std::move(
                                                                  rails)}
-    {
-    }
+    {}
 
     /**
      * Adds this Device object to the specified IDMap.
diff --git a/phosphor-regulators/src/error_logging.hpp b/phosphor-regulators/src/error_logging.hpp
index e6abfbe..1468604 100644
--- a/phosphor-regulators/src/error_logging.hpp
+++ b/phosphor-regulators/src/error_logging.hpp
@@ -167,8 +167,7 @@
      * @param bus D-Bus bus object
      */
     explicit DBusErrorLogging(sdbusplus::bus::bus& bus) : bus{bus}
-    {
-    }
+    {}
 
     /** @copydoc ErrorLogging::logConfigFileError() */
     virtual void logConfigFileError(Entry::Level severity,
diff --git a/phosphor-regulators/src/exception_utils.cpp b/phosphor-regulators/src/exception_utils.cpp
index 4640d0b..965deb5 100644
--- a/phosphor-regulators/src/exception_utils.cpp
+++ b/phosphor-regulators/src/exception_utils.cpp
@@ -52,8 +52,7 @@
             getExceptions(e.nested_ptr(), exceptions);
         }
         catch (...)
-        {
-        }
+        {}
 
         // Append this exception to vector
         exceptions.emplace_back(eptr);
@@ -72,8 +71,7 @@
         getMessages(inner, messages);
     }
     catch (...)
-    {
-    }
+    {}
 
     // Append error message from this exception
     messages.emplace_back(e.what());
diff --git a/phosphor-regulators/src/interfaces/manager_interface.cpp b/phosphor-regulators/src/interfaces/manager_interface.cpp
index 1b35d25..47c233d 100644
--- a/phosphor-regulators/src/interfaces/manager_interface.cpp
+++ b/phosphor-regulators/src/interfaces/manager_interface.cpp
@@ -35,8 +35,7 @@
 
 ManagerInterface::ManagerInterface(sdbusplus::bus::bus& bus, const char* path) :
     _serverInterface(bus, path, interface, _vtable, this)
-{
-}
+{}
 
 int ManagerInterface::callbackConfigure(sd_bus_message* msg, void* context,
                                         sd_bus_error* error)
diff --git a/phosphor-regulators/src/journal.cpp b/phosphor-regulators/src/journal.cpp
index ba9d846..eed5a70 100644
--- a/phosphor-regulators/src/journal.cpp
+++ b/phosphor-regulators/src/journal.cpp
@@ -44,8 +44,7 @@
     JournalCloser& operator=(JournalCloser&&) = delete;
 
     JournalCloser(sd_journal* journal) : journal{journal}
-    {
-    }
+    {}
 
     ~JournalCloser()
     {
diff --git a/phosphor-regulators/src/phase_fault_detection.hpp b/phosphor-regulators/src/phase_fault_detection.hpp
index 467d8c7..876d90e 100644
--- a/phosphor-regulators/src/phase_fault_detection.hpp
+++ b/phosphor-regulators/src/phase_fault_detection.hpp
@@ -79,8 +79,7 @@
                                  const std::string& deviceID = "") :
         actions{std::move(actions)},
         deviceID{deviceID}
-    {
-    }
+    {}
 
     /**
      * Clears all error history.
diff --git a/phosphor-regulators/src/pmbus_error.hpp b/phosphor-regulators/src/pmbus_error.hpp
index 1050af3..ac2a0a5 100644
--- a/phosphor-regulators/src/pmbus_error.hpp
+++ b/phosphor-regulators/src/pmbus_error.hpp
@@ -49,8 +49,7 @@
                         const std::string& inventoryPath) :
         error{"PMBusError: " + error},
         deviceID{deviceID}, inventoryPath{inventoryPath}
-    {
-    }
+    {}
 
     /**
      * Returns the unique ID of the device where the error occurred.
diff --git a/phosphor-regulators/src/presence_detection.hpp b/phosphor-regulators/src/presence_detection.hpp
index 0574003..07edb26 100644
--- a/phosphor-regulators/src/presence_detection.hpp
+++ b/phosphor-regulators/src/presence_detection.hpp
@@ -72,8 +72,7 @@
      */
     explicit PresenceDetection(std::vector<std::unique_ptr<Action>> actions) :
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Clears the cached presence value.
diff --git a/phosphor-regulators/src/presence_service.hpp b/phosphor-regulators/src/presence_service.hpp
index 79f839c..83b73c1 100644
--- a/phosphor-regulators/src/presence_service.hpp
+++ b/phosphor-regulators/src/presence_service.hpp
@@ -84,8 +84,7 @@
      * @param bus D-Bus bus object
      */
     explicit DBusPresenceService(sdbusplus::bus::bus& bus) : bus{bus}
-    {
-    }
+    {}
 
     /** @copydoc PresenceService::clearCache() */
     virtual void clearCache(void) override
diff --git a/phosphor-regulators/src/rail.hpp b/phosphor-regulators/src/rail.hpp
index c661183..5591c36 100644
--- a/phosphor-regulators/src/rail.hpp
+++ b/phosphor-regulators/src/rail.hpp
@@ -64,8 +64,7 @@
         id{id},
         configuration{std::move(configuration)}, sensorMonitoring{std::move(
                                                      sensorMonitoring)}
-    {
-    }
+    {}
 
     /**
      * Clears all error history.
diff --git a/phosphor-regulators/src/rule.hpp b/phosphor-regulators/src/rule.hpp
index 407f50e..ddfaa62 100644
--- a/phosphor-regulators/src/rule.hpp
+++ b/phosphor-regulators/src/rule.hpp
@@ -60,8 +60,7 @@
                   std::vector<std::unique_ptr<Action>> actions) :
         id{id},
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Executes the actions in this rule.
diff --git a/phosphor-regulators/src/sensor_monitoring.hpp b/phosphor-regulators/src/sensor_monitoring.hpp
index 0254fb2..00823af 100644
--- a/phosphor-regulators/src/sensor_monitoring.hpp
+++ b/phosphor-regulators/src/sensor_monitoring.hpp
@@ -64,8 +64,7 @@
      */
     explicit SensorMonitoring(std::vector<std::unique_ptr<Action>> actions) :
         actions{std::move(actions)}
-    {
-    }
+    {}
 
     /**
      * Clears all error history.
diff --git a/phosphor-regulators/src/services.hpp b/phosphor-regulators/src/services.hpp
index 42701c3..07e3d5f 100644
--- a/phosphor-regulators/src/services.hpp
+++ b/phosphor-regulators/src/services.hpp
@@ -114,8 +114,7 @@
     explicit BMCServices(sdbusplus::bus::bus& bus) :
         bus{bus}, errorLogging{bus},
         presenceService{bus}, sensors{bus}, vpd{bus}
-    {
-    }
+    {}
 
     /** @copydoc Services::getBus() */
     virtual sdbusplus::bus::bus& getBus() override
diff --git a/phosphor-regulators/src/vpd.hpp b/phosphor-regulators/src/vpd.hpp
index 8ae1314..4af3fa7 100644
--- a/phosphor-regulators/src/vpd.hpp
+++ b/phosphor-regulators/src/vpd.hpp
@@ -88,8 +88,7 @@
      * @param bus D-Bus bus object
      */
     explicit DBusVPD(sdbusplus::bus::bus& bus) : bus{bus}
-    {
-    }
+    {}
 
     /** @copydoc VPD::clearCache() */
     virtual void clearCache(void) override
diff --git a/phosphor-regulators/src/write_verification_error.hpp b/phosphor-regulators/src/write_verification_error.hpp
index bd92ce5..6a7420d 100644
--- a/phosphor-regulators/src/write_verification_error.hpp
+++ b/phosphor-regulators/src/write_verification_error.hpp
@@ -53,8 +53,7 @@
                                     const std::string& inventoryPath) :
         error{"WriteVerificationError: " + error},
         deviceID{deviceID}, inventoryPath{inventoryPath}
-    {
-    }
+    {}
 
     /**
      * Returns the unique ID of the device where the error occurred.
diff --git a/phosphor-regulators/test/test_sdbus_error.hpp b/phosphor-regulators/test/test_sdbus_error.hpp
index 09cc5f7..1937e2d 100644
--- a/phosphor-regulators/test/test_sdbus_error.hpp
+++ b/phosphor-regulators/test/test_sdbus_error.hpp
@@ -29,8 +29,7 @@
 {
   public:
     TestSDBusError(const std::string& error) : error{error}
-    {
-    }
+    {}
 
     const char* what() const noexcept override
     {
diff --git a/power-sequencer/mihawk-cpld.cpp b/power-sequencer/mihawk-cpld.cpp
index 0e0744a..4a7735d 100644
--- a/power-sequencer/mihawk-cpld.cpp
+++ b/power-sequencer/mihawk-cpld.cpp
@@ -53,8 +53,7 @@
 
 MihawkCPLD::MihawkCPLD(size_t instance, sdbusplus::bus::bus& bus) :
     Device(DEVICE_NAME, instance), bus(bus)
-{
-}
+{}
 
 void MihawkCPLD::onFailure()
 {
diff --git a/power-sequencer/mihawk-cpld.hpp b/power-sequencer/mihawk-cpld.hpp
index 4e0858e..f0af75a 100644
--- a/power-sequencer/mihawk-cpld.hpp
+++ b/power-sequencer/mihawk-cpld.hpp
@@ -55,8 +55,7 @@
      * Clears faults in the device
      */
     void clearFaults() override
-    {
-    }
+    {}
 
   private:
     /**
diff --git a/power-sequencer/pgood_monitor.hpp b/power-sequencer/pgood_monitor.hpp
index 8f9ba45..bc1ffd5 100644
--- a/power-sequencer/pgood_monitor.hpp
+++ b/power-sequencer/pgood_monitor.hpp
@@ -47,8 +47,7 @@
                  std::chrono::milliseconds& t) :
         DeviceMonitor(std::move(d), e, t),
         bus(b)
-    {
-    }
+    {}
 
     /**
      * Analyzes the power sequencer for fails and then
diff --git a/power-sequencer/runtime_monitor.hpp b/power-sequencer/runtime_monitor.hpp
index 5a6febc..8b6789d 100644
--- a/power-sequencer/runtime_monitor.hpp
+++ b/power-sequencer/runtime_monitor.hpp
@@ -55,8 +55,7 @@
         bus(b), match(bus, getMatchString(),
                       std::bind(std::mem_fn(&RuntimeMonitor::onPowerLost), this,
                                 std::placeholders::_1))
-    {
-    }
+    {}
 
     /**
      * Clears faults and then runs DeviceMonitor::run to
diff --git a/power-sequencer/ucd90160.cpp b/power-sequencer/ucd90160.cpp
index 8d28a32..6775dfb 100644
--- a/power-sequencer/ucd90160.cpp
+++ b/power-sequencer/ucd90160.cpp
@@ -55,8 +55,7 @@
     interface(std::get<ucd90160::pathField>(deviceMap.find(instance)->second),
               DRIVER_NAME, instance),
     gpioDevice(findGPIODevice(interface.path())), bus(bus)
-{
-}
+{}
 
 void UCD90160::onFailure()
 {
diff --git a/power-sequencer/ucd90160.hpp b/power-sequencer/ucd90160.hpp
index 7cfd809..82efc92 100644
--- a/power-sequencer/ucd90160.hpp
+++ b/power-sequencer/ucd90160.hpp
@@ -61,8 +61,7 @@
      * Clears faults in the device
      */
     void clearFaults() override
-    {
-    }
+    {}
 
   private:
     /**
diff --git a/power-supply/power_supply.cpp b/power-supply/power_supply.cpp
index 195e750..be89ed3 100644
--- a/power-supply/power_supply.cpp
+++ b/power-supply/power_supply.cpp
@@ -638,8 +638,7 @@
                             : "");
             }
             catch (ReadFailure& e)
-            {
-            }
+            {}
         }
     }
 
diff --git a/power-supply/record_manager.hpp b/power-supply/record_manager.hpp
index fed860d..63e4dd8 100644
--- a/power-supply/record_manager.hpp
+++ b/power-supply/record_manager.hpp
@@ -29,8 +29,7 @@
 {
   public:
     InvalidRecordException() : std::runtime_error("Invalid history record")
-    {
-    }
+    {}
 };
 
 /**
@@ -72,8 +71,7 @@
      *                     records to keep at a time
      */
     RecordManager(size_t maxRec) : RecordManager(maxRec, LAST_SEQUENCE_ID)
-    {
-    }
+    {}
 
     /**
      * @brief Constructor
@@ -85,8 +83,7 @@
      */
     RecordManager(size_t maxRec, size_t lastSequenceID) :
         maxRecords(maxRec), lastSequenceID(lastSequenceID)
-    {
-    }
+    {}
 
     /**
      * @brief Adds a new entry to the history
diff --git a/tools/i2c/i2c.hpp b/tools/i2c/i2c.hpp
index 84e8386..738547c 100644
--- a/tools/i2c/i2c.hpp
+++ b/tools/i2c/i2c.hpp
@@ -73,8 +73,7 @@
             close();
         }
         catch (...)
-        {
-        }
+        {}
     }
 
     /** @brief Get I2C adapter functionality
