aboutsummaryrefslogtreecommitdiff
path: root/build2/diagnostics
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2016-06-28 13:00:14 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2016-07-01 15:46:53 +0300
commitec7b7e37ce97d25adc209befb2c12cf16eb06ef1 (patch)
treebcb5b911b0d6579cf1d8c2e6ca4ac13383ca08f9 /build2/diagnostics
parent86db4fb7388285adc24e3aa6eb3f7ec68efd15f4 (diff)
Port to MSVC
Diffstat (limited to 'build2/diagnostics')
-rw-r--r--build2/diagnostics27
1 files changed, 11 insertions, 16 deletions
diff --git a/build2/diagnostics b/build2/diagnostics
index c0ba6ec..8aedf13 100644
--- a/build2/diagnostics
+++ b/build2/diagnostics
@@ -140,7 +140,7 @@ namespace build2
diag_record (const diag_mark<B>& m)
: empty_ (true), epilogue_ (nullptr) { *this << m;}
- ~diag_record () noexcept(false);
+ ~diag_record () noexcept (false);
void
append (diag_epilogue e) const
@@ -159,30 +159,25 @@ namespace build2
// Move constructible-only type.
//
- /*
- @@ libstdc++ doesn't yet have the ostringstream move support.
-
+ // Older versions of libstdc++ don't have the ostringstream move support
+ // and accuratly detecting its version is non-trivial. So we always use
+ // the pessimized implementation with libstdc++. Luckily, GCC doesn't seem
+ // to be needing move due to copy/move elision.
+ //
diag_record (diag_record&& r)
+#ifndef __GLIBCXX__
: os_ (move (r.os_))
- {
- empty_ = r.empty_;
- r.empty_ = true;
-
- epilogue_ = r.epilogue_;
- r.epilogue_ = nullptr;
- }
- */
-
- diag_record (diag_record&& r)
+#endif
{
empty_ = r.empty_;
epilogue_ = r.epilogue_;
if (!empty_)
{
- assert (false); //@@ Stream verbosity will not be transferred.
+#ifdef __GLIBCXX__
+ stream_verb (os_, stream_verb (r.os_));
os_ << r.os_.str ();
-
+#endif
r.empty_ = true;
r.epilogue_ = nullptr;
}