aboutsummaryrefslogtreecommitdiff
path: root/src/libutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/logging.hh4
-rw-r--r--src/libutil/types.hh20
-rw-r--r--src/libutil/util.hh2
3 files changed, 18 insertions, 8 deletions
diff --git a/src/libutil/logging.hh b/src/libutil/logging.hh
index 5df03da74..beb5e6b64 100644
--- a/src/libutil/logging.hh
+++ b/src/libutil/logging.hh
@@ -158,10 +158,10 @@ extern Verbosity verbosity; /* suppress msgs > this */
#define vomit(args...) printMsg(lvlVomit, args)
template<typename... Args>
-inline void warn(const std::string & fs, Args... args)
+inline void warn(const std::string & fs, const Args & ... args)
{
boost::format f(fs);
- nop{boost::io::detail::feed(f, args)...};
+ formatHelper(f, args...);
logger->warn(f.str());
}
diff --git a/src/libutil/types.hh b/src/libutil/types.hh
index 4bc91828b..20b96a85c 100644
--- a/src/libutil/types.hh
+++ b/src/libutil/types.hh
@@ -51,6 +51,16 @@ struct FormatOrString
... a_n’. However, ‘fmt(s)’ is equivalent to ‘s’ (so no %-expansion
takes place). */
+inline void formatHelper(boost::format & f)
+{
+}
+
+template<typename T, typename... Args>
+inline void formatHelper(boost::format & f, const T & x, const Args & ... args)
+{
+ formatHelper(f % x, args...);
+}
+
inline std::string fmt(const std::string & s)
{
return s;
@@ -67,11 +77,11 @@ inline std::string fmt(const FormatOrString & fs)
}
template<typename... Args>
-inline std::string fmt(const std::string & fs, Args... args)
+inline std::string fmt(const std::string & fs, const Args & ... args)
{
boost::format f(fs);
f.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
- nop{boost::io::detail::feed(f, args)...};
+ formatHelper(f, args...);
return f.str();
}
@@ -87,14 +97,14 @@ public:
unsigned int status = 1; // exit status
template<typename... Args>
- BaseError(unsigned int status, Args... args)
+ BaseError(unsigned int status, const Args & ... args)
: err(fmt(args...))
, status(status)
{
}
template<typename... Args>
- BaseError(Args... args)
+ BaseError(const Args & ... args)
: err(fmt(args...))
{
}
@@ -126,7 +136,7 @@ public:
int errNo;
template<typename... Args>
- SysError(Args... args)
+ SysError(const Args & ... args)
: Error(addErrno(fmt(args...)))
{ }
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index ca0b5737c..c18d1b5a4 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -305,7 +305,7 @@ public:
int status;
template<typename... Args>
- ExecError(int status, Args... args)
+ ExecError(int status, const Args & ... args)
: Error(args...), status(status)
{ }
};