diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-02-04 23:31:54 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2019-02-04 23:31:54 +0000 |
commit | 52c9ac16c11ccb8abc987b0bad3a4d93aa3bdfc8 (patch) | |
tree | a5dd8726b1f4a27a5ea987a2f1428f279146d2b8 | |
parent | Remove calls to naked new (diff) | |
download | libadhocutil-52c9ac16c11ccb8abc987b0bad3a4d93aa3bdfc8.tar.bz2 libadhocutil-52c9ac16c11ccb8abc987b0bad3a4d93aa3bdfc8.tar.xz libadhocutil-52c9ac16c11ccb8abc987b0bad3a4d93aa3bdfc8.zip |
Explicitly disable stream operator() of formatterlibadhocutil-0.7.0
When stream type does not have a write member, prevents failure when overload
matches call because first argument can passed by non-const reference.
-rw-r--r-- | libadhocutil/compileTimeFormatter.h | 3 | ||||
-rw-r--r-- | libadhocutil/unittests/testCompileTimeFormatter.cpp | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/libadhocutil/compileTimeFormatter.h b/libadhocutil/compileTimeFormatter.h index 562c511..9dae0ef 100644 --- a/libadhocutil/compileTimeFormatter.h +++ b/libadhocutil/compileTimeFormatter.h @@ -166,7 +166,8 @@ namespace AdHoc { * @return the stream. */ template<typename stream, typename ... Pn> - inline stream & operator()(stream & s, const Pn & ... pn) const + inline typename std::enable_if<(bool)&stream::write, stream>::type & + operator()(stream & s, const Pn & ... pn) const { return write(s, pn...); } diff --git a/libadhocutil/unittests/testCompileTimeFormatter.cpp b/libadhocutil/unittests/testCompileTimeFormatter.cpp index b02eadd..7313252 100644 --- a/libadhocutil/unittests/testCompileTimeFormatter.cpp +++ b/libadhocutil/unittests/testCompileTimeFormatter.cpp @@ -465,6 +465,12 @@ BOOST_AUTO_TEST_CASE(user_defined_literal_fmt_get) BOOST_CHECK_EQUAL("foo 42", "foo %?"_fmt(42)); } +BOOST_AUTO_TEST_CASE(user_defined_literal_fmt_get_reference) +{ + int x = 42; + BOOST_CHECK_EQUAL("foo 42", "foo %?"_fmt(x)); +} + BOOST_AUTO_TEST_CASE(user_defined_literal_fmt_write) { std::stringstream str; |