diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2012-05-25 22:04:21 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2012-05-25 22:04:21 +0000 |
| commit | 8b805c915a3847e72b6bb028e9fb3af1b17349df (patch) | |
| tree | eca09a65e87c1a27efd6e8acc9ec951dcfe2d3b4 /libcxx/test/containers | |
| parent | 7b29885463742ee73d2585d9d8fd8926d4222f73 (diff) | |
| download | bcm5719-llvm-8b805c915a3847e72b6bb028e9fb3af1b17349df.tar.gz bcm5719-llvm-8b805c915a3847e72b6bb028e9fb3af1b17349df.zip | |
The rules for emplace in map, multimap, unordered_map and unordered_multimap changed a while back and I'm just now updating to these new rules. In a nutshell, you've got to know you're emplacing to a pair and use one of pair's constructors. I made one extension: If you want to emplace the key and default construct the mapped_type, you can just emplace(key), as opposed to emplace(piecewise_construct, forward_as_tuple(key), forward_as_tuple()).
llvm-svn: 157503
Diffstat (limited to 'libcxx/test/containers')
9 files changed, 33 insertions, 12 deletions
diff --git a/libcxx/test/containers/associative/map/map.cons/default_recursive.pass.cpp b/libcxx/test/containers/associative/map/map.cons/default_recursive.pass.cpp index 5dab7a6faeb..452746c87bb 100644 --- a/libcxx/test/containers/associative/map/map.cons/default_recursive.pass.cpp +++ b/libcxx/test/containers/associative/map/map.cons/default_recursive.pass.cpp @@ -15,11 +15,15 @@ #include <map> +#if !__has_feature(cxx_noexcept) + struct X { std::multimap<int, X> m; }; +#endif + int main() { } diff --git a/libcxx/test/containers/associative/map/map.modifiers/emplace.pass.cpp b/libcxx/test/containers/associative/map/map.modifiers/emplace.pass.cpp index e6380c77128..4eb7e9f832a 100644 --- a/libcxx/test/containers/associative/map/map.modifiers/emplace.pass.cpp +++ b/libcxx/test/containers/associative/map/map.modifiers/emplace.pass.cpp @@ -16,6 +16,7 @@ #include <map> #include <cassert> +#include <tuple> #include "../../../Emplaceable.h" #include "../../../DefaultOnly.h" @@ -61,13 +62,15 @@ int main() assert(m.size() == 1); assert(m.begin()->first == 2); assert(m.begin()->second == Emplaceable()); - r = m.emplace(1, 2, 3.5); + r = m.emplace(std::piecewise_construct, std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(r.second); assert(r.first == m.begin()); assert(m.size() == 2); assert(m.begin()->first == 1); assert(m.begin()->second == Emplaceable(2, 3.5)); - r = m.emplace(1, 2, 3.5); + r = m.emplace(std::piecewise_construct, std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(!r.second); assert(r.first == m.begin()); assert(m.size() == 2); diff --git a/libcxx/test/containers/associative/map/map.modifiers/emplace_hint.pass.cpp b/libcxx/test/containers/associative/map/map.modifiers/emplace_hint.pass.cpp index 115dffca48b..2bc225e28a7 100644 --- a/libcxx/test/containers/associative/map/map.modifiers/emplace_hint.pass.cpp +++ b/libcxx/test/containers/associative/map/map.modifiers/emplace_hint.pass.cpp @@ -57,12 +57,16 @@ int main() assert(m.size() == 1); assert(m.begin()->first == 2); assert(m.begin()->second == Emplaceable()); - r = m.emplace_hint(m.end(), 1, 2, 3.5); + r = m.emplace_hint(m.end(), std::piecewise_construct, + std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(r == m.begin()); assert(m.size() == 2); assert(m.begin()->first == 1); assert(m.begin()->second == Emplaceable(2, 3.5)); - r = m.emplace_hint(m.end(), 1, 2, 3.5); + r = m.emplace_hint(m.end(), std::piecewise_construct, + std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(r == m.begin()); assert(m.size() == 2); assert(m.begin()->first == 1); diff --git a/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace.pass.cpp index 07f371a4cac..22406d8fb52 100644 --- a/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace.pass.cpp +++ b/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace.pass.cpp @@ -57,12 +57,14 @@ int main() assert(m.size() == 1); assert(m.begin()->first == 2); assert(m.begin()->second == Emplaceable()); - r = m.emplace(1, 2, 3.5); + r = m.emplace(std::piecewise_construct, std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(r == m.begin()); assert(m.size() == 2); assert(m.begin()->first == 1); assert(m.begin()->second == Emplaceable(2, 3.5)); - r = m.emplace(1, 3, 3.5); + r = m.emplace(std::piecewise_construct, std::forward_as_tuple(1), + std::forward_as_tuple(3, 3.5)); assert(r == next(m.begin())); assert(m.size() == 3); assert(r->first == 1); diff --git a/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace_hint.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace_hint.pass.cpp index 15c9e41229c..4c3e468d594 100644 --- a/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace_hint.pass.cpp +++ b/libcxx/test/containers/associative/multimap/multimap.modifiers/emplace_hint.pass.cpp @@ -57,12 +57,16 @@ int main() assert(m.size() == 1); assert(m.begin()->first == 2); assert(m.begin()->second == Emplaceable()); - r = m.emplace_hint(m.cbegin(), 1, 2, 3.5); + r = m.emplace_hint(m.cbegin(), std::piecewise_construct, + std::forward_as_tuple(1), + std::forward_as_tuple(2, 3.5)); assert(r == m.begin()); assert(m.size() == 2); assert(m.begin()->first == 1); assert(m.begin()->second == Emplaceable(2, 3.5)); - r = m.emplace_hint(m.cbegin(), 1, 3, 3.5); + r = m.emplace_hint(m.cbegin(), std::piecewise_construct, + std::forward_as_tuple(1), + std::forward_as_tuple(3, 3.5)); assert(r == m.begin()); assert(m.size() == 3); assert(r->first == 1); diff --git a/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace.pass.cpp b/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace.pass.cpp index 66bb05ecdab..488d2ba0053 100644 --- a/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace.pass.cpp +++ b/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace.pass.cpp @@ -40,7 +40,8 @@ int main() assert(r.first->first == 4); assert(r.first->second == Emplaceable(5, 6)); - r = c.emplace(5, 6, 7); + r = c.emplace(std::piecewise_construct, std::forward_as_tuple(5), + std::forward_as_tuple(6, 7)); assert(r.second); assert(c.size() == 3); assert(r.first->first == 5); diff --git a/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace_hint.pass.cpp b/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace_hint.pass.cpp index 41109d2f23a..463fc3b53a6 100644 --- a/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace_hint.pass.cpp +++ b/libcxx/test/containers/unord/unord.map/unorder.map.modifiers/emplace_hint.pass.cpp @@ -39,7 +39,8 @@ int main() assert(r->first == 4); assert(r->second == Emplaceable(5, 6)); - r = c.emplace_hint(e, 5, 6, 7); + r = c.emplace_hint(e, std::piecewise_construct, std::forward_as_tuple(5), + std::forward_as_tuple(6, 7)); assert(c.size() == 3); assert(r->first == 5); assert(r->second == Emplaceable(6, 7)); diff --git a/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace.pass.cpp b/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace.pass.cpp index 4b5fb60fa61..f05edd88f25 100644 --- a/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace.pass.cpp +++ b/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace.pass.cpp @@ -38,7 +38,8 @@ int main() assert(r->first == 4); assert(r->second == Emplaceable(5, 6)); - r = c.emplace(5, 6, 7); + r = c.emplace(std::piecewise_construct, std::forward_as_tuple(5), + std::forward_as_tuple(6, 7)); assert(c.size() == 3); assert(r->first == 5); assert(r->second == Emplaceable(6, 7)); diff --git a/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp b/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp index f2ca733ccc7..302451f1d68 100644 --- a/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp +++ b/libcxx/test/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp @@ -40,7 +40,8 @@ int main() assert(r->second == Emplaceable(5, 6)); assert(r == next(c.begin())); - r = c.emplace_hint(r, 3, 6, 7); + r = c.emplace_hint(r, std::piecewise_construct, std::forward_as_tuple(3), + std::forward_as_tuple(6, 7)); assert(c.size() == 3); assert(r->first == 3); assert(r->second == Emplaceable(6, 7)); |

