summaryrefslogtreecommitdiff
path: root/boost/hana/fwd/map.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/hana/fwd/map.hpp')
-rw-r--r--boost/hana/fwd/map.hpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/boost/hana/fwd/map.hpp b/boost/hana/fwd/map.hpp
index 25ff7add35..bff0b012f0 100644
--- a/boost/hana/fwd/map.hpp
+++ b/boost/hana/fwd/map.hpp
@@ -2,7 +2,7 @@
@file
Forward declares `boost::hana::map`.
-@copyright Louis Dionne 2013-2016
+@copyright Louis Dionne 2013-2017
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
*/
@@ -17,14 +17,17 @@ Distributed under the Boost Software License, Version 1.0.
#include <boost/hana/fwd/insert.hpp>
#include <boost/hana/fwd/keys.hpp>
-#include <utility>
-
BOOST_HANA_NAMESPACE_BEGIN
//! Tag representing `hana::map`s.
//! @relates hana::map
struct map_tag { };
+ namespace detail {
+ template <typename ...Pairs>
+ struct make_map_type;
+ }
+
//! @ingroup group-datatypes
//! Basic associative container requiring unique, `Comparable` and
//! `Hashable` keys.
@@ -42,7 +45,7 @@ BOOST_HANA_NAMESPACE_BEGIN
//! - the fact that `hana::map<Pairs...>` is, or is not, a dependent type
//!
//! In particular, the last point is very important; `hana::map<Pairs...>`
- //! is only a shortcut for
+ //! is basically equivalent to
//! @code
//! decltype(hana::make_pair(std::declval<Pairs>()...))
//! @endcode
@@ -106,6 +109,14 @@ BOOST_HANA_NAMESPACE_BEGIN
template <typename ...P>
explicit constexpr map(P&& ...pairs);
+ //! Assign a map to another map __with the exact same type__. Only
+ //! exists when all the elements of the map are copy-assignable.
+ constexpr map& operator=(map const& other);
+
+ //! Move-assign a map to another map __with the exact same type__.
+ //! Only exists when all the elements of the map are move-assignable.
+ constexpr map& operator=(map&& other);
+
//! Equivalent to `hana::equal`
template <typename X, typename Y>
friend constexpr auto operator==(X&& x, Y&& y);
@@ -120,7 +131,7 @@ BOOST_HANA_NAMESPACE_BEGIN
};
#else
template <typename ...Pairs>
- using map = decltype(hana::make<map_tag>(std::declval<Pairs>()...));
+ using map = typename detail::make_map_type<Pairs...>::type;
#endif
//! Function object for creating a `hana::map`.