changeset 23685:a94ed7424d63

work around GCC 7 template instantiation problem * symtab.cc (dump_container_map): Provide non-template versions for specific cases we need.
author John W. Eaton <jwe@octave.org>
date Sat, 24 Jun 2017 14:10:13 -0400
parents c84328c2a6c7
children 93371ce5378d
files libinterp/corefcn/symtab.cc
diffstat 1 files changed, 40 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/symtab.cc	Sat Jun 24 11:39:32 2017 -0400
+++ b/libinterp/corefcn/symtab.cc	Sat Jun 24 14:10:13 2017 -0400
@@ -1419,9 +1419,11 @@
   return fcn;
 }
 
+#if 0
+// This fails with GCC 7.
 template <typename V, template <typename...> class C>
 static octave_value
-dump_container_map (const std::map<std::string, C<V>>& container_map)
+dump_container_map_template (const std::map<std::string, C<V>>& container_map)
 {
   if (container_map.empty ())
     return octave_value (Matrix ());
@@ -1437,6 +1439,43 @@
 
   return octave_value (info_map);
 }
+#else
+static octave_value
+dump_container_map (const std::map<std::string, std::list<std::string>>& container_map)
+{
+  if (container_map.empty ())
+    return octave_value (Matrix ());
+
+  std::map<std::string, octave_value> info_map;
+
+  for (const auto& nm_container : container_map)
+    {
+      std::string nm = nm_container.first;
+      const std::list<std::string>& container = nm_container.second;
+      info_map[nm] = Cell (container);
+    }
+
+  return octave_value (info_map);
+}
+
+static octave_value
+dump_container_map (const std::map<std::string, std::set<std::string>>& container_map)
+{
+  if (container_map.empty ())
+    return octave_value (Matrix ());
+
+  std::map<std::string, octave_value> info_map;
+
+  for (const auto& nm_container : container_map)
+    {
+      std::string nm = nm_container.first;
+      const std::set<std::string>& container = nm_container.second;
+      info_map[nm] = Cell (container);
+    }
+
+  return octave_value (info_map);
+}
+#endif
 
 octave_value
 symbol_table::dump (void) const