Mercurial > octave
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