Improve support for C++98 compilers that require a copy ctor when binding a reference to a temporary.

This commit is contained in:
Victor Zverovich 2013-12-10 08:08:41 -08:00
parent dd32508ce6
commit 2d485d1916
3 changed files with 12 additions and 12 deletions

View File

@ -98,7 +98,8 @@ with an arbitrary action performed when formatting is complete:
// Formats an error message and prints it to std::cerr. // Formats an error message and prints it to std::cerr.
fmt::Formatter<PrintError> ReportError(const char *format) { fmt::Formatter<PrintError> ReportError(const char *format) {
return Move(fmt::Formatter<PrintError>(format)); fmt::Formatter<PrintError> f(format);
return f;
} }
ReportError("File not found: {}") << path; ReportError("File not found: {}") << path;

View File

@ -1121,7 +1121,8 @@ class NoAction {
// Formats an error message and prints it to stdout. // Formats an error message and prints it to stdout.
fmt::Formatter<PrintError> ReportError(const char *format) { fmt::Formatter<PrintError> ReportError(const char *format) {
return Move(fmt::Formatter<PrintError>(format)); fmt::Formatter f<PrintError>(format);
return f;
} }
ReportError("File not found: {}") << path; ReportError("File not found: {}") << path;
@ -1169,12 +1170,6 @@ class Formatter : private Action, public BasicFormatter<Char> {
} }
}; };
// Removes a const qualifier from a formatter object making it moveable.
template <typename Action, typename Char>
Formatter<Action, Char> &Move(const Formatter<Action, Char> &f) {
return const_cast<Formatter<Action, Char> &>(f);
}
/** /**
Fast integer formatter. Fast integer formatter.
*/ */
@ -1248,11 +1243,13 @@ class FormatInt {
\endrst \endrst
*/ */
inline Formatter<> Format(StringRef format) { inline Formatter<> Format(StringRef format) {
return Move(Formatter<>(format)); Formatter<> f(format);
return f;
} }
inline Formatter<NoAction, wchar_t> Format(WStringRef format) { inline Formatter<NoAction, wchar_t> Format(WStringRef format) {
return Move(Formatter<NoAction, wchar_t>(format)); Formatter<NoAction, wchar_t> f(format);
return f;
} }
/** A formatting action that writes formatted output to stdout. */ /** A formatting action that writes formatted output to stdout. */
@ -1268,7 +1265,8 @@ class Write {
// Example: // Example:
// Print("Elapsed time: {0:.2f} seconds") << 1.23; // Print("Elapsed time: {0:.2f} seconds") << 1.23;
inline Formatter<Write> Print(StringRef format) { inline Formatter<Write> Print(StringRef format) {
return Move(Formatter<Write>(format)); Formatter<Write> f(format);
return f;
} }
} }

View File

@ -1341,7 +1341,8 @@ struct PrintError {
}; };
fmt::Formatter<PrintError> ReportError(const char *format) { fmt::Formatter<PrintError> ReportError(const char *format) {
return Move(fmt::Formatter<PrintError>(format)); fmt::Formatter<PrintError> f(format);
return f;
} }
TEST(FormatterTest, Examples) { TEST(FormatterTest, Examples) {