[libcxx-commits] [PATCH] D62454: SFINAE on pair/tuple assignment operators 2729
Zoe Carver via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Feb 17 11:07:59 PST 2021
zoecarver updated this revision to Diff 324361.
zoecarver added a comment.
Herald added a project: libc++.
Herald added a reviewer: libc++.
- Rebase off main
- Remove changes to unrelated tests
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62454/new/
https://reviews.llvm.org/D62454
Files:
libcxx/docs/Cxx1zStatusIssuesStatus.csv
libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/copy.pass.cpp
libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp
Index: libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp
===================================================================
--- libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp
+++ libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp
@@ -37,6 +37,12 @@
explicit D(int i) : B(i) {}
};
+struct NonMoveAssignable
+{
+ NonMoveAssignable& operator=(NonMoveAssignable const&) = default;
+ NonMoveAssignable& operator=(NonMoveAssignable &&) = delete;
+};
+
int main(int, char**)
{
{
@@ -48,6 +54,16 @@
assert(std::get<0>(t1) == 2);
assert(std::get<1>(t1)->id_ == 3);
}
+ {
+ using T = std::tuple<int, NonMoveAssignable>;
+ using P = std::pair <int, NonMoveAssignable>;
+ static_assert(!std::is_assignable<T&, P&&>::value, "");
+ }
+ {
+ using T = std::tuple<int, int, int>;
+ using P = std::pair <int, int>;
+ static_assert(!std::is_assignable<T&, P&&>::value, "");
+ }
return 0;
}
Index: libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/copy.pass.cpp
===================================================================
--- libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/copy.pass.cpp
+++ libcxx/test/std/utilities/tuple/tuple.tuple/tuple.assign/copy.pass.cpp
@@ -35,6 +35,10 @@
MoveAssignable& operator=(MoveAssignable&&) = default;
};
+struct CopyAssignableInt {
+ CopyAssignableInt& operator=(int&) { return *this; }
+};
+
int main(int, char**)
{
{
@@ -100,6 +104,21 @@
using T = std::tuple<int, MoveAssignable>;
static_assert(!std::is_copy_assignable<T>::value, "");
}
+ {
+ using T = std::tuple<int, int, int>;
+ using P = std::pair <int, int>;
+ static_assert(!std::is_assignable<T, P>::value, "");
+ }
+ { // test const requirement
+ using T = std::tuple<CopyAssignableInt, CopyAssignableInt>;
+ using P = std::pair <int, int>;
+ static_assert(!std::is_assignable<T&, P const>::value, "");
+ }
+ {
+ using T = std::tuple<int, MoveAssignable>;
+ using P = std::pair <int, MoveAssignable>;
+ static_assert(!std::is_assignable<T&, P&>::value, "");
+ }
return 0;
}
Index: libcxx/docs/Cxx1zStatusIssuesStatus.csv
===================================================================
--- libcxx/docs/Cxx1zStatusIssuesStatus.csv
+++ libcxx/docs/Cxx1zStatusIssuesStatus.csv
@@ -232,7 +232,7 @@
"`2699 <https://wg21.link/LWG2699>`__","Missing restriction in [numeric.requirements]","Issaquah","|Complete|",""
"`2712 <https://wg21.link/LWG2712>`__","copy_file(from, to, ...) has a number of unspecified error conditions","Issaquah","|Complete|",""
"`2722 <https://wg21.link/LWG2722>`__","equivalent incorrectly specifies throws clause","Issaquah","|Complete|",""
-"`2729 <https://wg21.link/LWG2729>`__","Missing SFINAE on std::pair::operator=","Issaquah","",""
+"`2729 <https://wg21.link/LWG2729>`__","Missing SFINAE on std::pair::operator=","Issaquah","|Complete|",""
"`2732 <https://wg21.link/LWG2732>`__","Questionable specification of path::operator/= and path::append","Issaquah","|Complete|",""
"`2733 <https://wg21.link/LWG2733>`__","[fund.ts.v2] gcd / lcm and bool","Issaquah","|Complete|",""
"`2735 <https://wg21.link/LWG2735>`__","std::abs(short), std::abs(signed char) and others should return int instead of double in order to be compatible with C++98 and C","Issaquah","|Complete|",""
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62454.324361.patch
Type: text/x-patch
Size: 3527 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210217/6c9e383b/attachment-0001.bin>
More information about the libcxx-commits
mailing list