First half of support for N3657; heterogenous lookups for set/multiset

llvm-svn: 188241
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 25d3402c6a595cdf5555a82de0eee8d8a58df25a
diff --git a/include/functional b/include/functional
index 287bf72..1486a8e 100644
--- a/include/functional
+++ b/include/functional
@@ -515,6 +515,7 @@
     template <class _T1, class _T2>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) + _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -537,6 +538,7 @@
     template <class _T1, class _T2>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) - _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -559,6 +561,7 @@
     template <class _T1, class _T2>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) * _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -581,6 +584,7 @@
     template <class _T1, class _T2>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) / _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -603,6 +607,7 @@
     template <class _T1, class _T2>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) % _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -625,6 +630,7 @@
     template <class _Tp>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const
         { return -_VSTD::forward<_Tp>(__x); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -647,6 +653,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) == _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -669,6 +676,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) != _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -691,6 +699,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) > _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -715,6 +724,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) >= _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -737,6 +747,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) <= _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -759,6 +770,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) && _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -781,6 +793,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) || _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -803,6 +816,7 @@
     template <class _Tp>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const
         { return !_VSTD::forward<_Tp>(__x); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -825,6 +839,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) & _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -847,6 +862,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) | _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -869,6 +885,7 @@
     template <class _T1, class _T2> _LIBCPP_INLINE_VISIBILITY
     auto operator()(_T1&& __t, _T2&& __u) const
         { return _VSTD::forward<_T1>(__t) ^ _VSTD::forward<_T2>(__u); }
+    typedef void is_transparent;
 };
 #endif
 
@@ -887,6 +904,7 @@
     template <class _Tp>
     _LIBCPP_INLINE_VISIBILITY auto operator()(_Tp&& __x) const
         { return ~_VSTD::forward<_Tp>(__x); }
+    typedef void is_transparent;
 };
 #endif