From 40ad977046b2c8abff1b73f5e0937cc39e22df46 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 28 May 2021 12:23:48 -0400 Subject: [PATCH] Define operator<< in the corresponding namespace This fixes the build for me with clang 11.1.0 (from LLVM repositories) on Debian buster as C++11. As far as I know this is the general best practice because of ADL voodoo, but Ardour's approach to namespaces is pretty anarchic, and I'm not really sure exactly why this wasn't building for some types. Also tested to build find with the default buster GCC 8.3.0. --- libs/ardour/ardour/bundle.h | 4 ++-- libs/ardour/ardour/chan_count.h | 4 ++-- libs/ardour/ardour/chan_mapping.h | 4 ++-- libs/ardour/ardour/plugin_insert.h | 4 ++-- libs/ardour/ardour/presentation_info.h | 4 ++-- libs/ardour/ardour/tempo.h | 8 ++++---- libs/ardour/chan_count.cc | 7 ++++--- libs/ardour/chan_mapping.cc | 14 ++++++-------- libs/ardour/ltc_slave.cc | 1 + libs/ardour/plugin_insert.cc | 2 +- libs/ardour/presentation_info.cc | 2 +- libs/ardour/session.cc | 6 ------ libs/ardour/tempo.cc | 6 +++--- libs/canvas/canvas/canvas.h | 4 ++-- libs/canvas/canvas/item.h | 2 +- libs/evoral/ControlSet.cc | 9 ++++----- libs/evoral/evoral/Parameter.h | 6 ++---- libs/evoral/evoral/Sequence.h | 4 +--- libs/pbd/id.cc | 2 +- libs/pbd/pbd/id.h | 4 ++-- libs/surfaces/mackie/controls.h | 6 +++--- libs/surfaces/mackie/device_info.h | 3 +-- libs/surfaces/us2400/controls.h | 6 +++--- libs/surfaces/us2400/device_info.h | 3 +-- libs/temporal/temporal/bbt_time.h | 10 +++++----- libs/temporal/temporal/time.h | 4 ++-- libs/temporal/time.cc | 7 ++++--- nutemp/t.h | 8 ++++---- 28 files changed, 66 insertions(+), 78 deletions(-) diff --git a/libs/ardour/ardour/bundle.h b/libs/ardour/ardour/bundle.h index cf035133ea..00a661999d 100644 --- a/libs/ardour/ardour/bundle.h +++ b/libs/ardour/ardour/bundle.h @@ -178,8 +178,8 @@ public: int channel; ///< channel index, or -1 for "all" }; +std::ostream & operator<< (std::ostream & o, Bundle const &); + } -std::ostream & operator<< (std::ostream & o, ARDOUR::Bundle const &); - #endif /* __ardour_bundle_h__ */ diff --git a/libs/ardour/ardour/chan_count.h b/libs/ardour/ardour/chan_count.h index a62d5dc70f..438d5abaa1 100644 --- a/libs/ardour/ardour/chan_count.h +++ b/libs/ardour/ardour/chan_count.h @@ -212,9 +212,9 @@ private: uint32_t _counts[DataType::num_types]; }; -} // namespace ARDOUR +LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ChanCount& c); -LIBARDOUR_API std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanCount& c); +} // namespace ARDOUR #endif // __ardour_chan_count_h__ diff --git a/libs/ardour/ardour/chan_mapping.h b/libs/ardour/ardour/chan_mapping.h index 21838a1221..ef7344c9ed 100644 --- a/libs/ardour/ardour/chan_mapping.h +++ b/libs/ardour/ardour/chan_mapping.h @@ -136,9 +136,9 @@ private: Mappings _mappings; }; -} // namespace ARDOUR +std::ostream& operator<<(std::ostream& o, const ChanMapping& m); -std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanMapping& m); +} // namespace ARDOUR #endif // __ardour_chan_mapping_h__ diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index 8b4b55f6e4..22a0ac98c1 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -447,8 +447,8 @@ private: GATOMIC_QUAL gint _flush; }; +std::ostream& operator<<(std::ostream& o, const PluginInsert::Match& m); + } // namespace ARDOUR -std::ostream& operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m); - #endif /* __ardour_plugin_insert_h__ */ diff --git a/libs/ardour/ardour/presentation_info.h b/libs/ardour/ardour/presentation_info.h index 023b947730..05da7bb0a3 100644 --- a/libs/ardour/ardour/presentation_info.h +++ b/libs/ardour/ardour/presentation_info.h @@ -280,8 +280,8 @@ class LIBARDOUR_API PresentationInfo : public PBD::Stateful static int selection_counter; }; +LIBARDOUR_API std::ostream& operator<<(std::ostream& o, PresentationInfo const& rid); + } -std::ostream& operator<<(std::ostream& o, ARDOUR::PresentationInfo const& rid); - #endif /* __libardour_presentation_info_h__ */ diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h index 69e1af1473..726f4a94e0 100644 --- a/libs/ardour/ardour/tempo.h +++ b/libs/ardour/ardour/tempo.h @@ -627,11 +627,11 @@ private: MeterSection* copy_metrics_and_point (const Metrics& metrics, Metrics& copy, MeterSection* section) const; }; -}; /* namespace ARDOUR */ +LIBARDOUR_API std::ostream& operator<< (std::ostream&, const Meter&); +LIBARDOUR_API std::ostream& operator<< (std::ostream&, const Tempo&); +LIBARDOUR_API std::ostream& operator<< (std::ostream&, const MetricSection&); -LIBARDOUR_API std::ostream& operator<< (std::ostream&, const ARDOUR::Meter&); -LIBARDOUR_API std::ostream& operator<< (std::ostream&, const ARDOUR::Tempo&); -LIBARDOUR_API std::ostream& operator<< (std::ostream&, const ARDOUR::MetricSection&); +}; /* namespace ARDOUR */ namespace PBD { DEFINE_ENUM_CONVERT (ARDOUR::TempoSection::Type) diff --git a/libs/ardour/chan_count.cc b/libs/ardour/chan_count.cc index 6324f8c0fb..1ee567fc3e 100644 --- a/libs/ardour/chan_count.cc +++ b/libs/ardour/chan_count.cc @@ -66,8 +66,9 @@ ChanCount::state(const std::string& name) const // Statics const ChanCount ChanCount::ZERO = ChanCount(); -} // namespace ARDOUR - -std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanCount& c) { +std::ostream& operator<<(std::ostream& o, const ChanCount& c) { return o << "AUDIO=" << c.n_audio() << ":MIDI=" << c.n_midi(); } + +} // namespace ARDOUR + diff --git a/libs/ardour/chan_mapping.cc b/libs/ardour/chan_mapping.cc index d907efe732..02817fcb62 100644 --- a/libs/ardour/chan_mapping.cc +++ b/libs/ardour/chan_mapping.cc @@ -257,16 +257,12 @@ ChanMapping::count () const return rv; } - - -} // namespace ARDOUR - -std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanMapping& cm) +std::ostream& operator<<(std::ostream& o, const ChanMapping& cm) { - const ARDOUR::ChanMapping::Mappings& mp (cm.mappings()); - for (ARDOUR::ChanMapping::Mappings::const_iterator tm = mp.begin(); tm != mp.end(); ++tm) { + const ChanMapping::Mappings& mp (cm.mappings()); + for (ChanMapping::Mappings::const_iterator tm = mp.begin(); tm != mp.end(); ++tm) { o << tm->first.to_string() << endl; - for (ARDOUR::ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); + for (ChanMapping::TypeMapping::const_iterator i = tm->second.begin(); i != tm->second.end(); ++i) { o << "\t" << i->first << " => " << i->second << endl; } @@ -274,3 +270,5 @@ std::ostream& operator<<(std::ostream& o, const ARDOUR::ChanMapping& cm) return o; } + +} // namespace ARDOUR diff --git a/libs/ardour/ltc_slave.cc b/libs/ardour/ltc_slave.cc index 6a2f71dacb..b9f4c25459 100644 --- a/libs/ardour/ltc_slave.cc +++ b/libs/ardour/ltc_slave.cc @@ -264,6 +264,7 @@ LTC_TransportMaster::equal_ltc_sample_time(LTCFrame *a, LTCFrame *b) { } return true; } + static ostream& operator<< (ostream& ostr, LTCFrame& a) { ostr diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index b0048bbd01..2470ce9094 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -3382,7 +3382,7 @@ PluginInsert::clear_stats () g_atomic_int_set (&_stat_reset, 1); } -std::ostream& operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m) +std::ostream& ARDOUR::operator<<(std::ostream& o, const ARDOUR::PluginInsert::Match& m) { switch (m.method) { case PluginInsert::Impossible: o << "Impossible"; break; diff --git a/libs/ardour/presentation_info.cc b/libs/ardour/presentation_info.cc index 52cbaa39df..db34179f2a 100644 --- a/libs/ardour/presentation_info.cc +++ b/libs/ardour/presentation_info.cc @@ -297,7 +297,7 @@ PresentationInfo::operator= (PresentationInfo const& other) } std::ostream& -operator<<(std::ostream& o, ARDOUR::PresentationInfo const& pi) +ARDOUR::operator<<(std::ostream& o, ARDOUR::PresentationInfo const& pi) { return o << pi.order() << '/' << enum_2_string (pi.flags()) << '/' << pi.color(); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 60d4583c73..c9fb5657ef 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3230,17 +3230,11 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool } } -#if !defined(__APPLE__) && !defined(__FreeBSD__) - /* clang complains: 'operator<<' should be declared prior to the call site or in an associated namespace of one of its - * arguments std::ostream& operator<<(std::ostream& o, ARDOUR::PresentationInfo const& rid)" - */ DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("added route %1, group order %2 type %3 (summary: %4)\n", r->name(), r->presentation_info().order(), enum_2_string (r->presentation_info().flags()), r->presentation_info())); -#endif - if (input_auto_connect || output_auto_connect) { auto_connect_route (r, input_auto_connect, output_auto_connect, ChanCount (), ChanCount (), existing_inputs, existing_outputs); diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index 38e3ecc9b5..a164cf2c93 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -4943,17 +4943,17 @@ struct bbtcmp { }; std::ostream& -operator<< (std::ostream& o, const Meter& m) { +ARDOUR::operator<< (std::ostream& o, const ARDOUR::Meter& m) { return o << m.divisions_per_bar() << '/' << m.note_divisor(); } std::ostream& -operator<< (std::ostream& o, const Tempo& t) { +ARDOUR::operator<< (std::ostream& o, const ARDOUR::Tempo& t) { return o << t.note_types_per_minute() << " 1/" << t.note_type() << "'s per minute"; } std::ostream& -operator<< (std::ostream& o, const MetricSection& section) { +ARDOUR::operator<< (std::ostream& o, const ARDOUR::MetricSection& section) { o << "MetricSection @ " << section.sample() << ' '; diff --git a/libs/canvas/canvas/canvas.h b/libs/canvas/canvas/canvas.h index 90b6db4192..ba87c262f6 100644 --- a/libs/canvas/canvas/canvas.h +++ b/libs/canvas/canvas/canvas.h @@ -323,8 +323,8 @@ private: void scrolled (); }; +std::ostream& operator<< (std::ostream&, const Canvas&); + } -std::ostream& operator<< (std::ostream&, const ArdourCanvas::Canvas&); - #endif diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 9d9ee62219..0b03dc294e 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -333,7 +333,7 @@ private: void propagate_show_hide (); }; -extern LIBCANVAS_API std::ostream& operator<< (std::ostream&, const ArdourCanvas::Item&); +extern LIBCANVAS_API std::ostream& operator<< (std::ostream&, const Item&); } diff --git a/libs/evoral/ControlSet.cc b/libs/evoral/ControlSet.cc index c9096187db..82b841dca8 100644 --- a/libs/evoral/ControlSet.cc +++ b/libs/evoral/ControlSet.cc @@ -104,12 +104,11 @@ ControlSet::clear_controls () } } -} // namespace Evoral - -/* No good place for this so just put it here */ - std::ostream& -std::operator<< (std::ostream & str, Evoral::Parameter const & p) +operator<< (std::ostream & str, Parameter const & p) { return str << p.type() << '-' << p.id() << '-' << (int) p.channel(); } + +} // namespace Evoral + diff --git a/libs/evoral/evoral/Parameter.h b/libs/evoral/evoral/Parameter.h index 672afec653..5af6937c1f 100644 --- a/libs/evoral/evoral/Parameter.h +++ b/libs/evoral/evoral/Parameter.h @@ -87,11 +87,9 @@ private: uint8_t _channel; }; -} // namespace Evoral +std::ostream& operator<< (std::ostream &str, Parameter const &); -namespace std { -std::ostream& operator<< (std::ostream &str, Evoral::Parameter const &); -} +} // namespace Evoral #endif // EVORAL_PARAMETER_HPP diff --git a/libs/evoral/evoral/Sequence.h b/libs/evoral/evoral/Sequence.h index 04864dde8d..15f09a3fa4 100644 --- a/libs/evoral/evoral/Sequence.h +++ b/libs/evoral/evoral/Sequence.h @@ -371,11 +371,9 @@ private: uint8_t _highest_note; }; +template /*LIBEVORAL_API*/ std::ostream& operator<<(std::ostream& o, const Evoral::Sequence