Changes to non-portable behavior in <any> tests. Inline detailed description of each change is forthcoming. Changes are almost entirely in test code, with one behavioral change to <any> itself to fix self-swap behavior.
Details
Diff Detail
Event Timeline
I'll push a revision with the whitespace changes reverted soon.
.gitignore | ||
---|---|---|
59 | This is an editor byproduct, I suppose, not "MSVC libraries test harness". Let me know if anyone cares and I'll add a comment. | |
include/any | ||
553 | Don't blow up on self swap. This is the obvious (naive) fix; it's possible that someone who has looked at more of the implementation than this single function could devise a better fix. | |
test/libcxx/utilities/any/any.class/any.assign/value.pass.cpp | ||
26 | This behavior is not required by N4606, so I moved this test to the libcxx tree. | |
test/libcxx/utilities/any/any.class/any.cons/value.pass.cpp | ||
24 | Again, not required behavior (I am, of course, totally unbiased about whether this behavior is a good idea.) | |
test/libcxx/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp | ||
35 | ibid. | |
test/std/utilities/any/any.class/any.assign/move.pass.cpp | ||
43 | Portability fix: don't rely on a moved-from any being empty. (Occurs more below) | |
93 | Woops - I forgot to review the diff without -w. Will correct this unintended whitespace change. | |
test/std/utilities/any/any.class/any.assign/value.pass.cpp | ||
69 | Again, don't rely on any's moved-from state being empty. | |
123 | Whitespace again (will fix). | |
172 | I split out these non-portable tests into test/libcxx/utilities/any.class/any.assign/value.pass.cpp | |
test/std/utilities/any/any.class/any.cons/copy.pass.cpp | ||
74 | Typo in the original test. | |
test/std/utilities/any/any.class/any.cons/move.pass.cpp | ||
80 | More move behavior. | |
97 | Another inadvertent whitespace change. | |
test/std/utilities/any/any.class/any.cons/value.pass.cpp | ||
110 | Non-portable behavior split into test/libcxx/utilities/any.class/any.cons/value.pass.cpp | |
143 | Inadvertent whitespace change. | |
182 | See above. | |
test/std/utilities/any/any.class/any.modifiers/emplace.pass.cpp | ||
132 | Ensure that LargeThrows is large, regardless of how bloated std::any may become. | |
234 | Inadvertent whitespace change. | |
test/std/utilities/any/any.class/any.modifiers/swap.pass.cpp | ||
89 | ibid. | |
92 | New test: self-swap must have no effect. | |
test/std/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp | ||
71–76 | Possibly controversial: I'm going to propose that template<class T> any_cast(any&&) should require that T is not an lvalue reference type, so that it cannot return potentially dangling references. That means the portion of this test that performs any_cast<T>(any&&) must be conditioned on whether or not T is an lvalue reference type. | |
146 | This code becomes ill-formed with the above proposed change. | |
198 | Remove unused variable ca. | |
306 | Non-standard behavior split out into test/libcxx/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp | |
test/std/utilities/any/any.nonmembers/make_any.pass.cpp | ||
102 | Again, ensure that LargeThrows is large independent of the size of any. |
@CaseyCarter Thank you for the patch. I fixed most of your issues in r283606 {as well as a bunch of libc++ bugs).
I'm still deciding what to do about the in_place SFINAE tests, but I'll follow up on that shortly. As for this patch please update it if there are any fixes I missed, otherwise please close it.
test/libcxx/utilities/any/any.class/any.assign/value.pass.cpp | ||
---|---|---|
26 | I thought this behavior was subject to a LWG PR, but I can't seem to find one. I'll either create a LWG issue to standardize this behavior or remove the tests and fix libc++. | |
test/libcxx/utilities/any/any.class/any.cons/value.pass.cpp | ||
24 | I'm removing these tests all together. | |
test/libcxx/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp | ||
35 | I'm removing these tests all together. | |
test/std/utilities/any/any.class/any.assign/value.pass.cpp | ||
172 | Same comment as above in regards to the in_place SFINAE tests. | |
test/std/utilities/any/any.class/any.cons/copy.pass.cpp | ||
74 | Ack. Fixing. | |
test/std/utilities/any/any.nonmembers/any.cast/any_cast_reference.pass.cpp | ||
146 | I'm removing these tests. |
Addressed the issues about in_place SFINAE constraints in an inline comment.
test/libcxx/utilities/any/any.class/any.assign/value.pass.cpp | ||
---|---|---|
26 | OK, so the ValueType ctor was constrained by http://cplusplus.github.io/LWG/lwg-active.html#2744 but that didn't touch the assignment operator. I think that's a mistake, and I'll look into adjusting the PR for 2744. |
Ignoring the assignment from in_place_t issue for now, r283606 is good modulo a couple of tiny things that I'll just email you directly.
This is an editor byproduct, I suppose, not "MSVC libraries test harness". Let me know if anyone cares and I'll add a comment.