[libcxx-commits] [PATCH] D92790: [libc++][P0053R7] Add <syncstream> header and implement std::basic_syncbuf
Marek Kurdej via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Dec 10 03:31:30 PST 2020
curdeius requested changes to this revision.
curdeius added a comment.
This revision now requires changes to proceed.
As a general note, the test paths should match the paragraphs in the standard.
So, e.g. `libcxx/test/std/input.output/stream.buffers/syncbuf/syncbuf.assign/member_swap.pass.cpp` should be `libcxx/test/std/input.output/syncstream/syncstream.syncbuf/syncstream.syncbuf.assign/swap.pass.cpp`.
@ldionne, please correct me on that if I'm wrong.
Also, you seem to lack a test on the destructor (that it correctly calls emit and doesn't throw).
Anyway, in general, I like your implementation.
================
Comment at: libcxx/docs/Cxx2aStatusPaperStatus.csv:196
"`P2116 <https://wg21.link/P2116>`__","LWG","Remove tuple-like protocol support from fixed-extent span","Prague","|Complete|","11.0"
+"`P0053R7 <https://wg21.link/P0053R7>`__","LWG","<syncstream>","Albuquerque","|Partial|","12.0"
----------------
It would be nice if you added a note on what's implemented and what's not (see `Cxx2aStatus.rst`).
================
Comment at: libcxx/include/syncstream:14
+/*
+ syncstream synopsis
+
----------------
You should also update the synopsis of `<iosfwd>`. Cf. paragraph 3.2 of the paper.
================
Comment at: libcxx/include/syncstream:64-98
+ template <class charT,
+ class traits,
+ class Allocator>
+ class basic_osyncstream
+ : public basic_ostream<charT, traits>
+ {
+ public:
----------------
I never know, should unimplemented parts be present in the synopsis? @ldionne?
================
Comment at: libcxx/include/syncstream:135-137
+ basic_syncbuf(streambuf_type* __obuf = nullptr,
+ const allocator_type& __a = allocator_type{})
+ : __mtx(__obuf), __buf(string_type{__a}), __wrapped(__obuf) {}
----------------
This ctor should be splitted in two, one of them being explicit and taking 0 or 1 params, cf. synopsis.
================
Comment at: libcxx/test/std/input.output/stream.buffers/syncbuf/syncbuf.cons/default.pass.cpp:17
+
+// basic_syncbuf(streambuf_type* obuf);
+
----------------
Also here, please add tests for explicit. Cf. below.
================
Comment at: libcxx/test/std/input.output/stream.buffers/syncbuf/syncbuf.cons/wrapped.pass.cpp:17
+
+// basic_syncbuf();
+
----------------
You should also test that you can't construct it implicitly. You may use `test_convertible` for that.
You might have a look at D91292.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92790/new/
https://reviews.llvm.org/D92790
More information about the libcxx-commits
mailing list