diff --git a/.clang-format b/.clang-format
index 00d9a54..42a2307 100644
--- a/.clang-format
+++ b/.clang-format
@@ -17,7 +17,7 @@
 AlwaysBreakAfterDefinitionReturnType: None
 AlwaysBreakAfterReturnType: None
 AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: false
+AlwaysBreakTemplateDeclarations: true
 BinPackArguments: true
 BinPackParameters: true
 BraceWrapping:
diff --git a/mapbox/recursive_wrapper.hpp b/mapbox/recursive_wrapper.hpp
index af569ef..c90a88c 100644
--- a/mapbox/recursive_wrapper.hpp
+++ b/mapbox/recursive_wrapper.hpp
@@ -20,7 +20,8 @@
 namespace util
 {
 
-template <typename T> class recursive_wrapper
+template <typename T>
+class recursive_wrapper
 {
 
     T* p_;
diff --git a/mapbox/variant.hpp b/mapbox/variant.hpp
index 2019fc5..14fe75c 100644
--- a/mapbox/variant.hpp
+++ b/mapbox/variant.hpp
@@ -78,7 +78,8 @@
 
 }; // class bad_variant_access
 
-template <typename R = void> struct MAPBOX_VARIANT_DEPRECATED static_visitor
+template <typename R = void>
+struct MAPBOX_VARIANT_DEPRECATED static_visitor
 {
     using result_type = R;
 
@@ -96,7 +97,8 @@
 
 static constexpr std::size_t invalid_value = std::size_t(-1);
 
-template <typename T, typename... Types> struct direct_type;
+template <typename T, typename... Types>
+struct direct_type;
 
 template <typename T, typename First, typename... Types>
 struct direct_type<T, First, Types...>
@@ -106,7 +108,8 @@
                                              : direct_type<T, Types...>::index;
 };
 
-template <typename T> struct direct_type<T>
+template <typename T>
+struct direct_type<T>
 {
     static constexpr std::size_t index = invalid_value;
 };
@@ -117,11 +120,13 @@
 
 #else
 
-template <typename...> struct disjunction : std::false_type
+template <typename...>
+struct disjunction : std::false_type
 {
 };
 
-template <typename B1> struct disjunction<B1> : B1
+template <typename B1>
+struct disjunction<B1> : B1
 {
 };
 
@@ -138,7 +143,8 @@
 
 #endif
 
-template <typename T, typename... Types> struct convertible_type;
+template <typename T, typename... Types>
+struct convertible_type;
 
 template <typename T, typename First, typename... Types>
 struct convertible_type<T, First, Types...>
@@ -151,12 +157,14 @@
             : convertible_type<T, Types...>::index;
 };
 
-template <typename T> struct convertible_type<T>
+template <typename T>
+struct convertible_type<T>
 {
     static constexpr std::size_t index = invalid_value;
 };
 
-template <typename T, typename... Types> struct value_traits
+template <typename T, typename... Types>
+struct value_traits
 {
     using value_type = typename std::remove_const<
         typename std::remove_reference<T>::type>::type;
@@ -173,7 +181,8 @@
         typename std::tuple_element<tindex, std::tuple<void, Types...>>::type;
 };
 
-template <typename T, typename R = void> struct enable_if_type
+template <typename T, typename R = void>
+struct enable_if_type
 {
     using type = R;
 };
@@ -204,9 +213,11 @@
     using type = typename F::result_type;
 };
 
-template <std::size_t arg1, std::size_t... others> struct static_max;
+template <std::size_t arg1, std::size_t... others>
+struct static_max;
 
-template <std::size_t arg> struct static_max<arg>
+template <std::size_t arg>
+struct static_max<arg>
 {
     static const std::size_t value = arg;
 };
@@ -219,9 +230,11 @@
                                          : static_max<arg2, others...>::value;
 };
 
-template <typename... Types> struct variant_helper;
+template <typename... Types>
+struct variant_helper;
 
-template <typename T, typename... Types> struct variant_helper<T, Types...>
+template <typename T, typename... Types>
+struct variant_helper<T, Types...>
 {
     VARIANT_INLINE static void destroy(const std::size_t type_index, void* data)
     {
@@ -264,7 +277,8 @@
     }
 };
 
-template <> struct variant_helper<>
+template <>
+struct variant_helper<>
 {
     VARIANT_INLINE static void destroy(const std::size_t, void*)
     {
@@ -277,7 +291,8 @@
     }
 };
 
-template <typename T> struct unwrapper
+template <typename T>
+struct unwrapper
 {
     static T const& apply_const(T const& obj)
     {
@@ -289,7 +304,8 @@
     }
 };
 
-template <typename T> struct unwrapper<recursive_wrapper<T>>
+template <typename T>
+struct unwrapper<recursive_wrapper<T>>
 {
     static auto apply_const(recursive_wrapper<T> const& obj) ->
         typename recursive_wrapper<T>::type const&
@@ -303,7 +319,8 @@
     }
 };
 
-template <typename T> struct unwrapper<std::reference_wrapper<T>>
+template <typename T>
+struct unwrapper<std::reference_wrapper<T>>
 {
     static auto apply_const(std::reference_wrapper<T> const& obj) ->
         typename std::reference_wrapper<T>::type const&
@@ -549,7 +566,8 @@
 // comparator functors
 struct equal_comp
 {
-    template <typename T> bool operator()(T const& lhs, T const& rhs) const
+    template <typename T>
+    bool operator()(T const& lhs, T const& rhs) const
     {
         return lhs == rhs;
     }
@@ -557,13 +575,15 @@
 
 struct less_comp
 {
-    template <typename T> bool operator()(T const& lhs, T const& rhs) const
+    template <typename T>
+    bool operator()(T const& lhs, T const& rhs) const
     {
         return lhs < rhs;
     }
 };
 
-template <typename Variant, typename Comp> class comparer
+template <typename Variant, typename Comp>
+class comparer
 {
   public:
     explicit comparer(Variant const& lhs) noexcept : lhs_(lhs)
@@ -571,7 +591,8 @@
     }
     comparer& operator=(comparer const&) = delete;
     // visitor
-    template <typename T> bool operator()(T const& rhs_content) const
+    template <typename T>
+    bool operator()(T const& rhs_content) const
     {
         T const& lhs_content = lhs_.template get_unchecked<T>();
         return Comp()(lhs_content, rhs_content);
@@ -587,7 +608,8 @@
 {
 };
 
-template <typename... Types> class variant
+template <typename... Types>
+class variant
 {
     static_assert(sizeof...(Types) > 0,
                   "Template parameter type list of variant can not be empty");
@@ -1067,7 +1089,8 @@
 }
 #endif
 
-template <typename ResultType, typename T> ResultType& get_unchecked(T& var)
+template <typename ResultType, typename T>
+ResultType& get_unchecked(T& var)
 {
     return var.template get_unchecked<ResultType>();
 }
diff --git a/sdbusplus/asio/detail/async_send_handler.hpp b/sdbusplus/asio/detail/async_send_handler.hpp
index 1c56eb2..ce4e394 100644
--- a/sdbusplus/asio/detail/async_send_handler.hpp
+++ b/sdbusplus/asio/detail/async_send_handler.hpp
@@ -27,7 +27,8 @@
 {
 namespace detail
 {
-template <typename Handler> struct async_send_handler
+template <typename Handler>
+struct async_send_handler
 {
     Handler handler_;
     async_send_handler(Handler&& handler) : handler_(std::move(handler))
diff --git a/sdbusplus/message.hpp b/sdbusplus/message.hpp
index dc2fe5b..ac468dc 100644
--- a/sdbusplus/message.hpp
+++ b/sdbusplus/message.hpp
@@ -108,7 +108,8 @@
      *  @tparam ...Args - Type of items to append to message.
      *  @param[in] args - Items to append to message.
      */
-    template <typename... Args> void append(Args&&... args)
+    template <typename... Args>
+    void append(Args&&... args)
     {
         sdbusplus::message::append(_intf, _msg.get(),
                                    std::forward<Args>(args)...);
@@ -119,7 +120,8 @@
      *  @tparam ...Args - Type of items to read from message.
      *  @param[out] args - Items to read from message.
      */
-    template <typename... Args> void read(Args&&... args)
+    template <typename... Args>
+    void read(Args&&... args)
     {
         sdbusplus::message::read(_intf, _msg.get(),
                                  std::forward<Args>(args)...);
diff --git a/sdbusplus/message/append.hpp b/sdbusplus/message/append.hpp
index 0451bdd..efea26d 100644
--- a/sdbusplus/message/append.hpp
+++ b/sdbusplus/message/append.hpp
@@ -53,19 +53,23 @@
 {
 };
 // std::string needs a c_str() call.
-template <> struct can_append_multiple<std::string> : std::false_type
+template <>
+struct can_append_multiple<std::string> : std::false_type
 {
 };
 // object_path needs a c_str() call.
-template <> struct can_append_multiple<object_path> : std::false_type
+template <>
+struct can_append_multiple<object_path> : std::false_type
 {
 };
 // signature needs a c_str() call.
-template <> struct can_append_multiple<signature> : std::false_type
+template <>
+struct can_append_multiple<signature> : std::false_type
 {
 };
 // bool needs to be resized to int, per sdbus documentation.
-template <> struct can_append_multiple<bool> : std::false_type
+template <>
+struct can_append_multiple<bool> : std::false_type
 {
 };
 // std::vector/map/unordered_map/set need loops
@@ -99,10 +103,12 @@
  *
  *  @tparam S - Type of element to append.
  */
-template <typename S, typename Enable = void> struct append_single
+template <typename S, typename Enable = void>
+struct append_single
 {
     // Downcast
-    template <typename T> using Td = types::details::type_id_downcast_t<T>;
+    template <typename T>
+    using Td = types::details::type_id_downcast_t<T>;
 
     // sd_bus_message_append_basic expects a T* (cast to void*) for most types,
     // so t& is appropriate.  In the case of char*, it expects the void* is
@@ -110,16 +116,19 @@
     //
     // Use these helper templates 'address_of(t)' in place of '&t' to
     // handle both cases.
-    template <typename T> static auto address_of_helper(T&& t, std::false_type)
+    template <typename T>
+    static auto address_of_helper(T&& t, std::false_type)
     {
         return &t;
     }
-    template <typename T> static auto address_of_helper(T&& t, std::true_type)
+    template <typename T>
+    static auto address_of_helper(T&& t, std::true_type)
     {
         return t;
     }
 
-    template <typename T> static auto address_of(T&& t)
+    template <typename T>
+    static auto address_of(T&& t)
     {
         return address_of_helper(std::forward<T>(t),
                                  std::is_pointer<std::remove_reference_t<T>>());
@@ -158,7 +167,8 @@
 using append_single_t = append_single<types::details::type_id_downcast_t<T>>;
 
 /** @brief Specialization of append_single for std::strings. */
-template <> struct append_single<std::string>
+template <>
+struct append_single<std::string>
 {
     template <typename T>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, T&& s)
@@ -169,7 +179,8 @@
 };
 
 /** @brief Specialization of append_single for details::string_wrapper. */
-template <typename T> struct append_single<details::string_wrapper<T>>
+template <typename T>
+struct append_single<details::string_wrapper<T>>
 {
     template <typename S>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -180,7 +191,8 @@
 };
 
 /** @brief Specialization of append_single for bool. */
-template <> struct append_single<bool>
+template <>
+struct append_single<bool>
 {
     template <typename T>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, T&& b)
@@ -212,7 +224,8 @@
 };
 
 /** @brief Specialization of append_single for std::pairs. */
-template <typename T1, typename T2> struct append_single<std::pair<T1, T2>>
+template <typename T1, typename T2>
+struct append_single<std::pair<T1, T2>>
 {
     template <typename S>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -228,7 +241,8 @@
 };
 
 /** @brief Specialization of append_single for std::tuples. */
-template <typename... Args> struct append_single<std::tuple<Args...>>
+template <typename... Args>
+struct append_single<std::tuple<Args...>>
 {
     template <typename S, std::size_t... I>
     static void _op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s,
@@ -253,7 +267,8 @@
 };
 
 /** @brief Specialization of append_single for std::variant. */
-template <typename... Args> struct append_single<variant<Args...>>
+template <typename... Args>
+struct append_single<variant<Args...>>
 {
     template <typename S, typename = std::enable_if_t<0 < sizeof...(Args)>>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -279,7 +294,8 @@
     sdbusplus::message::append(intf, m, t);
 }
 
-template <int Index> struct AppendHelper
+template <int Index>
+struct AppendHelper
 {
     template <typename... Fields>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
@@ -293,7 +309,8 @@
     }
 };
 
-template <> struct AppendHelper<1>
+template <>
+struct AppendHelper<1>
 {
     template <typename... Fields>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
diff --git a/sdbusplus/message/native_types.hpp b/sdbusplus/message/native_types.hpp
index 11a4b23..b67c7e1 100644
--- a/sdbusplus/message/native_types.hpp
+++ b/sdbusplus/message/native_types.hpp
@@ -13,7 +13,8 @@
 
 /** Simple wrapper class for std::string to allow conversion to and from an
  *  alternative typename. */
-template <typename T> struct string_wrapper
+template <typename T>
+struct string_wrapper
 {
     std::string str;
 
diff --git a/sdbusplus/message/read.hpp b/sdbusplus/message/read.hpp
index b3fb73b..2035d30 100644
--- a/sdbusplus/message/read.hpp
+++ b/sdbusplus/message/read.hpp
@@ -52,19 +52,23 @@
 {
 };
 // std::string needs a char* conversion.
-template <> struct can_read_multiple<std::string> : std::false_type
+template <>
+struct can_read_multiple<std::string> : std::false_type
 {
 };
 // object_path needs a char* conversion.
-template <> struct can_read_multiple<object_path> : std::false_type
+template <>
+struct can_read_multiple<object_path> : std::false_type
 {
 };
 // signature needs a char* conversion.
-template <> struct can_read_multiple<signature> : std::false_type
+template <>
+struct can_read_multiple<signature> : std::false_type
 {
 };
 // bool needs to be resized to int, per sdbus documentation.
-template <> struct can_read_multiple<bool> : std::false_type
+template <>
+struct can_read_multiple<bool> : std::false_type
 {
 };
 
@@ -103,10 +107,12 @@
  *
  *  @tparam S - Type of element to read.
  */
-template <typename S, typename Enable = void> struct read_single
+template <typename S, typename Enable = void>
+struct read_single
 {
     // Downcast
-    template <typename T> using Td = types::details::type_id_downcast_t<T>;
+    template <typename T>
+    using Td = types::details::type_id_downcast_t<T>;
 
     /** @brief Do the operation to read element.
      *
@@ -145,7 +151,8 @@
 using read_single_t = read_single<types::details::type_id_downcast_t<T>>;
 
 /** @brief Specialization of read_single for std::strings. */
-template <> struct read_single<std::string>
+template <>
+struct read_single<std::string>
 {
     template <typename T>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, T&& s)
@@ -162,7 +169,8 @@
 };
 
 /** @brief Specialization of read_single for details::string_wrapper. */
-template <typename T> struct read_single<details::string_wrapper<T>>
+template <typename T>
+struct read_single<details::string_wrapper<T>>
 {
     template <typename S>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -180,7 +188,8 @@
 };
 
 /** @brief Specialization of read_single for bools. */
-template <> struct read_single<bool>
+template <>
+struct read_single<bool>
 {
     template <typename T>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, T&& b)
@@ -272,7 +281,8 @@
 };
 
 /** @brief Specialization of read_single for std::pairs. */
-template <typename T1, typename T2> struct read_single<std::pair<T1, T2>>
+template <typename T1, typename T2>
+struct read_single<std::pair<T1, T2>>
 {
     template <typename S>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -300,7 +310,8 @@
 };
 
 /** @brief Specialization of read_single for std::tuples. */
-template <typename... Args> struct read_single<std::tuple<Args...>>
+template <typename... Args>
+struct read_single<std::tuple<Args...>>
 {
     template <typename S, std::size_t... I>
     static void _op(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s,
@@ -337,7 +348,8 @@
 };
 
 /** @brief Specialization of read_single for std::variant. */
-template <typename... Args> struct read_single<variant<Args...>>
+template <typename... Args>
+struct read_single<variant<Args...>>
 {
     template <typename S, typename S1, typename... Args1>
     static void read(sdbusplus::SdBusInterface* intf, sd_bus_message* m, S&& s)
@@ -404,7 +416,8 @@
     sdbusplus::message::read(intf, m, t);
 }
 
-template <int Index> struct ReadHelper
+template <int Index>
+struct ReadHelper
 {
     template <typename... Fields>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
@@ -418,7 +431,8 @@
     }
 };
 
-template <> struct ReadHelper<1>
+template <>
+struct ReadHelper<1>
 {
     template <typename... Fields>
     static void op(sdbusplus::SdBusInterface* intf, sd_bus_message* m,
diff --git a/sdbusplus/message/types.hpp b/sdbusplus/message/types.hpp
index 6156c0e..4dd5e3d 100644
--- a/sdbusplus/message/types.hpp
+++ b/sdbusplus/message/types.hpp
@@ -19,7 +19,8 @@
 
 namespace variant_ns = mapbox::util;
 
-template <typename... Args> using variant = variant_ns::variant<Args...>;
+template <typename... Args>
+using variant = variant_ns::variant<Args...>;
 
 namespace types
 {
@@ -38,13 +39,15 @@
  *  options at compile-time the use of type-deduced dbus strings is equal to
  *  the cost of hard-coded type string constants.
  */
-template <typename... Args> constexpr auto type_id();
+template <typename... Args>
+constexpr auto type_id();
 /** @fn type_id_nonull()
  *  @brief A non-null-terminated version of type_id.
  *
  *  This is useful when type-ids may need to be concatenated.
  */
-template <typename... Args> constexpr auto type_id_nonull();
+template <typename... Args>
+constexpr auto type_id_nonull();
 
 namespace details
 {
@@ -59,17 +62,20 @@
  *  2. Remove 'const' and 'volatile'.
  *  3. Convert 'char[N]' to 'char*'.
  */
-template <typename T> struct downcast_members
+template <typename T>
+struct downcast_members
 {
     using type = T;
 };
-template <typename... Args> struct downcast_members<std::pair<Args...>>
+template <typename... Args>
+struct downcast_members<std::pair<Args...>>
 {
     using type = std::pair<utility::array_to_ptr_t<
         char, std::remove_cv_t<std::remove_reference_t<Args>>>...>;
 };
 
-template <typename... Args> struct downcast_members<std::tuple<Args...>>
+template <typename... Args>
+struct downcast_members<std::tuple<Args...>>
 {
     using type = std::tuple<utility::array_to_ptr_t<
         char, std::remove_cv_t<std::remove_reference_t<Args>>>...>;
@@ -87,7 +93,8 @@
  *  2. Remove 'const' and 'volatile'.
  *  3. Convert 'char[N]' to 'char*'.
  */
-template <typename T> struct type_id_downcast
+template <typename T>
+struct type_id_downcast
 {
     using type = utility::array_to_ptr_t<
         char, downcast_members_t<std::remove_cv_t<std::remove_reference_t<T>>>>;
@@ -118,7 +125,8 @@
  *  A tuple_type_id must be one or more characters.  The C1 template param
  *  ensures at least one is present.
  */
-template <char C1, char... C> struct tuple_type_id
+template <char C1, char... C>
+struct tuple_type_id
 {
 
 /* This version check is required because a fix for auto is in 5.2+.
@@ -138,7 +146,8 @@
  *
  *  @tparam T - The type to get the dbus type character(s) for.
  */
-template <typename T> constexpr auto type_id_single();
+template <typename T>
+constexpr auto type_id_single();
 
 /** @fn type_id_multiple()
  *  @brief Get a tuple containing the dbus type characters for a sequence of
@@ -147,7 +156,8 @@
  *  @tparam T - The first type to get the dbus type character(s) for.
  *  @tparam ...Args - The remaining types.
  */
-template <typename T, typename... Args> constexpr auto type_id_multiple();
+template <typename T, typename... Args>
+constexpr auto type_id_multiple();
 
 /** @struct type_id
  *  @brief Defined dbus type tuple for a C++ type.
@@ -162,48 +172,62 @@
 {
 };
 // Specializations for built-in types.
-template <> struct type_id<bool> : tuple_type_id<SD_BUS_TYPE_BOOLEAN>
+template <>
+struct type_id<bool> : tuple_type_id<SD_BUS_TYPE_BOOLEAN>
 {
 };
-template <> struct type_id<uint8_t> : tuple_type_id<SD_BUS_TYPE_BYTE>
+template <>
+struct type_id<uint8_t> : tuple_type_id<SD_BUS_TYPE_BYTE>
 {
 };
 // int8_t isn't supported by dbus.
-template <> struct type_id<uint16_t> : tuple_type_id<SD_BUS_TYPE_UINT16>
+template <>
+struct type_id<uint16_t> : tuple_type_id<SD_BUS_TYPE_UINT16>
 {
 };
-template <> struct type_id<int16_t> : tuple_type_id<SD_BUS_TYPE_INT16>
+template <>
+struct type_id<int16_t> : tuple_type_id<SD_BUS_TYPE_INT16>
 {
 };
-template <> struct type_id<uint32_t> : tuple_type_id<SD_BUS_TYPE_UINT32>
+template <>
+struct type_id<uint32_t> : tuple_type_id<SD_BUS_TYPE_UINT32>
 {
 };
-template <> struct type_id<int32_t> : tuple_type_id<SD_BUS_TYPE_INT32>
+template <>
+struct type_id<int32_t> : tuple_type_id<SD_BUS_TYPE_INT32>
 {
 };
-template <> struct type_id<uint64_t> : tuple_type_id<SD_BUS_TYPE_UINT64>
+template <>
+struct type_id<uint64_t> : tuple_type_id<SD_BUS_TYPE_UINT64>
 {
 };
-template <> struct type_id<int64_t> : tuple_type_id<SD_BUS_TYPE_INT64>
+template <>
+struct type_id<int64_t> : tuple_type_id<SD_BUS_TYPE_INT64>
 {
 };
 // float isn't supported by dbus.
-template <> struct type_id<double> : tuple_type_id<SD_BUS_TYPE_DOUBLE>
+template <>
+struct type_id<double> : tuple_type_id<SD_BUS_TYPE_DOUBLE>
 {
 };
-template <> struct type_id<const char*> : tuple_type_id<SD_BUS_TYPE_STRING>
+template <>
+struct type_id<const char*> : tuple_type_id<SD_BUS_TYPE_STRING>
 {
 };
-template <> struct type_id<char*> : tuple_type_id<SD_BUS_TYPE_STRING>
+template <>
+struct type_id<char*> : tuple_type_id<SD_BUS_TYPE_STRING>
 {
 };
-template <> struct type_id<std::string> : tuple_type_id<SD_BUS_TYPE_STRING>
+template <>
+struct type_id<std::string> : tuple_type_id<SD_BUS_TYPE_STRING>
 {
 };
-template <> struct type_id<object_path> : tuple_type_id<SD_BUS_TYPE_OBJECT_PATH>
+template <>
+struct type_id<object_path> : tuple_type_id<SD_BUS_TYPE_OBJECT_PATH>
 {
 };
-template <> struct type_id<signature> : tuple_type_id<SD_BUS_TYPE_SIGNATURE>
+template <>
+struct type_id<signature> : tuple_type_id<SD_BUS_TYPE_SIGNATURE>
 {
 };
 
@@ -216,7 +240,8 @@
         type_id<type_id_downcast_t<typename T::value_type>>::value);
 };
 
-template <typename T1, typename T2> struct type_id<std::pair<T1, T2>>
+template <typename T1, typename T2>
+struct type_id<std::pair<T1, T2>>
 {
     static constexpr auto value =
         std::tuple_cat(tuple_type_id<SD_BUS_TYPE_DICT_ENTRY_BEGIN>::value,
@@ -225,7 +250,8 @@
                        tuple_type_id<SD_BUS_TYPE_DICT_ENTRY_END>::value);
 };
 
-template <typename... Args> struct type_id<std::tuple<Args...>>
+template <typename... Args>
+struct type_id<std::tuple<Args...>>
 {
     static constexpr auto value =
         std::tuple_cat(tuple_type_id<SD_BUS_TYPE_STRUCT_BEGIN>::value,
@@ -238,33 +264,38 @@
 {
 };
 
-template <> struct type_id<void>
+template <>
+struct type_id<void>
 {
     constexpr static auto value = std::make_tuple('\0');
 };
 
-template <typename T> constexpr auto type_id_single()
+template <typename T>
+constexpr auto type_id_single()
 {
     static_assert(!std::is_base_of<undefined_type_id, type_id<T>>::value,
                   "No dbus type conversion provided for type.");
     return type_id<T>::value;
 }
 
-template <typename T, typename... Args> constexpr auto type_id_multiple()
+template <typename T, typename... Args>
+constexpr auto type_id_multiple()
 {
     return std::tuple_cat(type_id_single<T>(), type_id_single<Args>()...);
 }
 
 } // namespace details
 
-template <typename... Args> constexpr auto type_id()
+template <typename... Args>
+constexpr auto type_id()
 {
     return std::tuple_cat(
         details::type_id_multiple<details::type_id_downcast_t<Args>...>(),
         std::make_tuple('\0') /* null terminator for C-string */);
 }
 
-template <typename... Args> constexpr auto type_id_nonull()
+template <typename... Args>
+constexpr auto type_id_nonull()
 {
     return details::type_id_multiple<details::type_id_downcast_t<Args>...>();
 }
diff --git a/sdbusplus/server/bindings.hpp b/sdbusplus/server/bindings.hpp
index af57845..b5429de 100644
--- a/sdbusplus/server/bindings.hpp
+++ b/sdbusplus/server/bindings.hpp
@@ -17,7 +17,8 @@
  *  can be inserted into a message.  This template provides a general no-op
  *  implementation for all other types.
  */
-template <typename T> T&& convertForMessage(T&& t)
+template <typename T>
+T&& convertForMessage(T&& t)
 {
     return std::forward<T>(t);
 }
diff --git a/sdbusplus/server/object.hpp b/sdbusplus/server/object.hpp
index 499f4e8..7aaeaa5 100644
--- a/sdbusplus/server/object.hpp
+++ b/sdbusplus/server/object.hpp
@@ -20,7 +20,8 @@
  *  These allow an object to group multiple dbus interface bindings into a
  *  single class.
  */
-template <class T, class... Rest> struct compose_impl : T, compose_impl<Rest...>
+template <class T, class... Rest>
+struct compose_impl : T, compose_impl<Rest...>
 {
     compose_impl(bus::bus& bus, const char* path) :
         T(bus, path), compose_impl<Rest...>(bus, path)
@@ -29,7 +30,8 @@
 };
 
 /** Specialization for single element. */
-template <class T> struct compose_impl<T> : T
+template <class T>
+struct compose_impl<T> : T
 {
     compose_impl(bus::bus& bus, const char* path) : T(bus, path)
     {
@@ -37,7 +39,8 @@
 };
 
 /** Default compose operation for variadic arguments. */
-template <class... Args> struct compose : compose_impl<Args...>
+template <class... Args>
+struct compose : compose_impl<Args...>
 {
     compose(bus::bus& bus, const char* path) : compose_impl<Args...>(bus, path)
     {
@@ -45,7 +48,8 @@
 };
 
 /** Specialization for zero variadic arguments. */
-template <> struct compose<>
+template <>
+struct compose<>
 {
     compose(bus::bus& bus, const char* path)
     {
@@ -66,7 +70,8 @@
  *  'sd_bus_emit_object_removed' signals are emitted.
  *
  */
-template <class... Args> struct object : details::compose<Args...>
+template <class... Args>
+struct object : details::compose<Args...>
 {
     /* Define all of the basic class operations:
      *     Not allowed:
@@ -139,7 +144,8 @@
 
 } // namespace object
 
-template <class... Args> using object_t = object::object<Args...>;
+template <class... Args>
+using object_t = object::object<Args...>;
 
 } // namespace server
 } // namespace sdbusplus
diff --git a/sdbusplus/server/transaction.hpp b/sdbusplus/server/transaction.hpp
index f6d9234..87af07b 100644
--- a/sdbusplus/server/transaction.hpp
+++ b/sdbusplus/server/transaction.hpp
@@ -46,7 +46,8 @@
 {
 
 /** @ brief Overload of std::hash for sdbusplus::bus::bus */
-template <> struct hash<sdbusplus::bus::bus>
+template <>
+struct hash<sdbusplus::bus::bus>
 {
     auto operator()(sdbusplus::bus::bus& b) const
     {
@@ -56,7 +57,8 @@
 };
 
 /** @ brief Overload of std::hash for sdbusplus::message::message */
-template <> struct hash<sdbusplus::message::message>
+template <>
+struct hash<sdbusplus::message::message>
 {
     auto operator()(sdbusplus::message::message& m) const
     {
@@ -66,7 +68,8 @@
 };
 
 /** @ brief Overload of std::hash for Transaction */
-template <> struct hash<sdbusplus::server::transaction::Transaction>
+template <>
+struct hash<sdbusplus::server::transaction::Transaction>
 {
     auto operator()(sdbusplus::server::transaction::Transaction const& t) const
     {
@@ -80,7 +83,8 @@
 };
 
 /** @ brief Overload of std::hash for details::Transaction */
-template <> struct hash<sdbusplus::server::transaction::details::Transaction>
+template <>
+struct hash<sdbusplus::server::transaction::details::Transaction>
 {
     auto operator()(
         sdbusplus::server::transaction::details::Transaction const& t) const
diff --git a/sdbusplus/utility/container_traits.hpp b/sdbusplus/utility/container_traits.hpp
index e778d17..8783097 100644
--- a/sdbusplus/utility/container_traits.hpp
+++ b/sdbusplus/utility/container_traits.hpp
@@ -11,7 +11,8 @@
  *
  *  @value A value as to whether or not the type supports iteration
  */
-template <typename T> struct has_const_iterator
+template <typename T>
+struct has_const_iterator
 {
   private:
     typedef char yes;
@@ -22,7 +23,8 @@
 
     template <typename C>
     static constexpr yes test(typename C::const_iterator*);
-    template <typename C> static constexpr no test(...);
+    template <typename C>
+    static constexpr no test(...);
 
   public:
     static constexpr bool value = sizeof(test<T>(0)) == sizeof(yes);
@@ -34,7 +36,8 @@
  *
  *  @value A value as to whether or not the type has an emplace method
  */
-template <typename T> struct has_emplace_method
+template <typename T>
+struct has_emplace_method
 {
   private:
     struct dummy
@@ -45,7 +48,8 @@
     static constexpr auto test(P* p)
         -> decltype(std::declval<C>().emplace(*p), std::true_type());
 
-    template <typename, typename> static std::false_type test(...);
+    template <typename, typename>
+    static std::false_type test(...);
 
   public:
     static constexpr bool value =
@@ -59,7 +63,8 @@
  *
  *  @value A value as to whether or not the type has an emplace_back method
  */
-template <typename T> struct has_emplace_back_method
+template <typename T>
+struct has_emplace_back_method
 {
   private:
     struct dummy
@@ -70,7 +75,8 @@
     static constexpr auto test(P* p)
         -> decltype(std::declval<C>().emplace_back(*p), std::true_type());
 
-    template <typename, typename> static std::false_type test(...);
+    template <typename, typename>
+    static std::false_type test(...);
 
   public:
     static constexpr bool value =
diff --git a/sdbusplus/utility/read_into_tuple.hpp b/sdbusplus/utility/read_into_tuple.hpp
index 30dbea5..e2875b6 100644
--- a/sdbusplus/utility/read_into_tuple.hpp
+++ b/sdbusplus/utility/read_into_tuple.hpp
@@ -30,7 +30,8 @@
 {
     return f(std::integral_constant<size_t, Is>{}...);
 }
-template <size_t N, class F> constexpr auto index_apply(F f)
+template <size_t N, class F>
+constexpr auto index_apply(F f)
 {
     return index_apply_impl(f, std::make_index_sequence<N>{});
 }
diff --git a/sdbusplus/utility/type_traits.hpp b/sdbusplus/utility/type_traits.hpp
index 9ba0180..fb6f0b6 100644
--- a/sdbusplus/utility/type_traits.hpp
+++ b/sdbusplus/utility/type_traits.hpp
@@ -23,7 +23,8 @@
 
 // Small helper class for stripping off the error code from the function
 // argument definitions so unpack can be called appropriately
-template <typename T> struct strip_first_arg
+template <typename T>
+struct strip_first_arg
 {
 };
 
@@ -34,7 +35,8 @@
 };
 
 // matching helper class to only return the first type
-template <typename T> struct get_first_arg
+template <typename T>
+struct get_first_arg
 {
 };
 
@@ -45,11 +47,13 @@
 };
 
 // helper class to remove const and reference from types
-template <typename T> struct decay_tuple
+template <typename T>
+struct decay_tuple
 {
 };
 
-template <typename... Args> struct decay_tuple<std::tuple<Args...>>
+template <typename... Args>
+struct decay_tuple<std::tuple<Args...>>
 {
     using type = std::tuple<typename std::decay<Args>::type...>;
 };
diff --git a/test/message/append.cpp b/test/message/append.cpp
index 6485d99..de40ef6 100644
--- a/test/message/append.cpp
+++ b/test/message/append.cpp
@@ -42,7 +42,8 @@
             nullptr, nullptr, nullptr, nullptr);
     }
 
-    template <typename T> void expect_basic(char type, T val)
+    template <typename T>
+    void expect_basic(char type, T val)
     {
         EXPECT_CALL(mock,
                     sd_bus_message_append_basic(
diff --git a/test/message/read.cpp b/test/message/read.cpp
index 07bc984..14da902 100644
--- a/test/message/read.cpp
+++ b/test/message/read.cpp
@@ -52,7 +52,8 @@
             .WillOnce(Return(ret));
     }
 
-    template <typename T> void expect_basic(char type, T val)
+    template <typename T>
+    void expect_basic(char type, T val)
     {
         EXPECT_CALL(mock, sd_bus_message_read_basic(nullptr, type, testing::_))
             .WillOnce(DoAll(AssignReadVal<T>(val), Return(0)));
diff --git a/test/message/types.cpp b/test/message/types.cpp
index a6df2f4..327fe71 100644
--- a/test/message/types.cpp
+++ b/test/message/types.cpp
@@ -3,7 +3,8 @@
 
 #include <gtest/gtest.h>
 
-template <typename... Args> auto dbus_string(Args&&... args)
+template <typename... Args>
+auto dbus_string(Args&&... args)
 {
     return std::string(sdbusplus::utility::tuple_to_array(
                            sdbusplus::message::types::type_id<Args...>())
