templates: Allow use of -fsanitize=undefined

Push down the str member to avoid linker errors about the lack of
storage for str when using -fsanitize=undefined.

Change-Id: I1a6b1ba9632aa6e4294573a6be3252d5230992b9
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/tools/phosphor-logging/templates/elog-gen-template.mako.hpp b/tools/phosphor-logging/templates/elog-gen-template.mako.hpp
index 670f8f5..23d8c08 100644
--- a/tools/phosphor-logging/templates/elog-gen-template.mako.hpp
+++ b/tools/phosphor-logging/templates/elog-gen-template.mako.hpp
@@ -69,10 +69,14 @@
     % for b in meta_list:
 struct ${b}
 {
-    static constexpr auto str = "${meta_data[b]['str']}";
+    /*
+     * We can't use -fsanitize=undefined if we declare a
+     * 'static constexpr auto str' member, so don't. Instead, open-code the
+     * mako template lookups.
+     */
     static constexpr auto str_short = "${meta_data[b]['str_short']}";
-    using type = std::tuple<std::decay_t<decltype(str)>,${meta_data[b]['type']}>;
-    explicit constexpr ${b}(${meta_data[b]['type']} a) : _entry(entry(str, a)) {};
+    using type = std::tuple<std::decay_t<decltype("${meta_data[b]['str']}")>,${meta_data[b]['type']}>;
+    explicit constexpr ${b}(${meta_data[b]['type']} a) : _entry(entry("${meta_data[b]['str']}", a)) {};
     type _entry;
 };
     % endfor