| Message ID | 20260115111630.1892890-1-barnabas.pocze@ideasonboard.com |
|---|---|
| State | Accepted |
| Headers | show |
| Series |
|
| Related | show |
Quoting Barnabás Pőcze (2026-01-15 11:16:28) > There is no real need for a function template. It is not defined in a > header file, so it has limited availability, and there exists only a > single instantion. > > So convert it to use `std::ostream` directly, like most `operator<<` > in the code base. > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > include/libcamera/base/utils.h | 4 +--- > src/libcamera/base/utils.cpp | 11 ++--------- > 2 files changed, 3 insertions(+), 12 deletions(-) > > diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h > index 0b7407f77..6ce1ace43 100644 > --- a/include/libcamera/base/utils.h > +++ b/include/libcamera/base/utils.h > @@ -426,9 +426,7 @@ scope_exit(EF) -> scope_exit<EF>; > } /* namespace utils */ > > #ifndef __DOXYGEN__ > -template<class CharT, class Traits> > -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, > - const utils::Duration &d); > +std::ostream &operator<<(std::ostream &os, const utils::Duration &d); > #endif > > } /* namespace libcamera */ > diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp > index 65d9181c9..2c3f2b7e6 100644 > --- a/src/libcamera/base/utils.cpp > +++ b/src/libcamera/base/utils.cpp > @@ -658,11 +658,9 @@ void ScopeExitActions::release() > } /* namespace utils */ > > #ifndef __DOXYGEN__ > -template<class CharT, class Traits> > -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, > - const utils::Duration &d) > +std::ostream &operator<<(std::ostream &os, const utils::Duration &d) > { > - std::basic_ostringstream<CharT, Traits> s; > + std::ostringstream s; > > s.flags(os.flags()); > s.imbue(os.getloc()); > @@ -671,11 +669,6 @@ std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> > s << d.get<std::micro>() << "us"; > return os << s.str(); > } > - > -template > -std::basic_ostream<char, std::char_traits<char>> & > -operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os, > - const utils::Duration &d); > #endif > > } /* namespace libcamera */ > -- > 2.52.0 >
On Thu, Jan 15, 2026 at 12:16:28PM +0100, Barnabás Pőcze wrote: > There is no real need for a function template. It is not defined in a > header file, so it has limited availability, and there exists only a > single instantion. Agreed. It's an internal function, not part of the public API, so the likelihood of needing to support something else that std::ostream is pretty much null. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > So convert it to use `std::ostream` directly, like most `operator<<` > in the code base. > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > include/libcamera/base/utils.h | 4 +--- > src/libcamera/base/utils.cpp | 11 ++--------- > 2 files changed, 3 insertions(+), 12 deletions(-) > > diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h > index 0b7407f77..6ce1ace43 100644 > --- a/include/libcamera/base/utils.h > +++ b/include/libcamera/base/utils.h > @@ -426,9 +426,7 @@ scope_exit(EF) -> scope_exit<EF>; > } /* namespace utils */ > > #ifndef __DOXYGEN__ > -template<class CharT, class Traits> > -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, > - const utils::Duration &d); > +std::ostream &operator<<(std::ostream &os, const utils::Duration &d); > #endif > > } /* namespace libcamera */ > diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp > index 65d9181c9..2c3f2b7e6 100644 > --- a/src/libcamera/base/utils.cpp > +++ b/src/libcamera/base/utils.cpp > @@ -658,11 +658,9 @@ void ScopeExitActions::release() > } /* namespace utils */ > > #ifndef __DOXYGEN__ > -template<class CharT, class Traits> > -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, > - const utils::Duration &d) > +std::ostream &operator<<(std::ostream &os, const utils::Duration &d) > { > - std::basic_ostringstream<CharT, Traits> s; > + std::ostringstream s; > > s.flags(os.flags()); > s.imbue(os.getloc()); > @@ -671,11 +669,6 @@ std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> > s << d.get<std::micro>() << "us"; > return os << s.str(); > } > - > -template > -std::basic_ostream<char, std::char_traits<char>> & > -operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os, > - const utils::Duration &d); > #endif > > } /* namespace libcamera */
diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h index 0b7407f77..6ce1ace43 100644 --- a/include/libcamera/base/utils.h +++ b/include/libcamera/base/utils.h @@ -426,9 +426,7 @@ scope_exit(EF) -> scope_exit<EF>; } /* namespace utils */ #ifndef __DOXYGEN__ -template<class CharT, class Traits> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, - const utils::Duration &d); +std::ostream &operator<<(std::ostream &os, const utils::Duration &d); #endif } /* namespace libcamera */ diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp index 65d9181c9..2c3f2b7e6 100644 --- a/src/libcamera/base/utils.cpp +++ b/src/libcamera/base/utils.cpp @@ -658,11 +658,9 @@ void ScopeExitActions::release() } /* namespace utils */ #ifndef __DOXYGEN__ -template<class CharT, class Traits> -std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> &os, - const utils::Duration &d) +std::ostream &operator<<(std::ostream &os, const utils::Duration &d) { - std::basic_ostringstream<CharT, Traits> s; + std::ostringstream s; s.flags(os.flags()); s.imbue(os.getloc()); @@ -671,11 +669,6 @@ std::basic_ostream<CharT, Traits> &operator<<(std::basic_ostream<CharT, Traits> s << d.get<std::micro>() << "us"; return os << s.str(); } - -template -std::basic_ostream<char, std::char_traits<char>> & -operator<< <char, std::char_traits<char>>(std::basic_ostream<char, std::char_traits<char>> &os, - const utils::Duration &d); #endif } /* namespace libcamera */
There is no real need for a function template. It is not defined in a header file, so it has limited availability, and there exists only a single instantion. So convert it to use `std::ostream` directly, like most `operator<<` in the code base. Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- include/libcamera/base/utils.h | 4 +--- src/libcamera/base/utils.cpp | 11 ++--------- 2 files changed, 3 insertions(+), 12 deletions(-)