<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2430: Heterogeneous container lookup should be enabled using meta-function instead of nested type</title>
<meta property="og:title" content="Issue 2430: Heterogeneous container lookup should be enabled using meta-function instead of nested type">
<meta property="og:description" content="C++ library issue. Status: NAD">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2430.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
  p {text-align:justify}
  li {text-align:justify}
  pre code.backtick::before { content: "`" }
  pre code.backtick::after { content: "`" }
  blockquote.note
  {
    background-color:#E0E0E0;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 1px;
    padding-bottom: 1px;
  }
  ins {background-color:#A0FFA0}
  del {background-color:#FFA0A0}
  table.issues-index { border: 1px solid; border-collapse: collapse; }
  table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
  table.issues-index td { padding: 4px; border: 1px solid; }
  table.issues-index td:nth-child(1) { text-align: right; }
  table.issues-index td:nth-child(2) { text-align: left; }
  table.issues-index td:nth-child(3) { text-align: left; }
  table.issues-index td:nth-child(4) { text-align: left; }
  table.issues-index td:nth-child(5) { text-align: center; }
  table.issues-index td:nth-child(6) { text-align: center; }
  table.issues-index td:nth-child(7) { text-align: left; }
  table.issues-index td:nth-child(5) span.no-pr { color: red; }
  @media (prefers-color-scheme: dark) {
     html {
        color: #ddd;
        background-color: black;
     }
     ins {
        background-color: #225522
     }
     del {
        background-color: #662222
     }
     a {
        color: #6af
     }
     a:visited {
        color: #6af
     }
     blockquote.note
     {
        background-color: rgba(255, 255, 255, .10)
     }
  }
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#NAD">NAD</a> status.</em></p>
<h3 id="2430"><a href="lwg-closed.html#2430">2430</a>. Heterogeneous container lookup should be enabled using meta-function instead of nested type</h3>
<p><b>Section:</b> 23.2.7 <a href="https://wg21.link/associative.reqmts">[associative.reqmts]</a> <b>Status:</b> <a href="lwg-active.html#NAD">NAD</a>
 <b>Submitter:</b> Tomasz Kami&nacute;ski <b>Opened:</b> 2014-07-14 <b>Last modified:</b> 2018-06-23</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#associative.reqmts">active issues</a> in [associative.reqmts].</p>
<p><b>View all other</b> <a href="lwg-index.html#associative.reqmts">issues</a> in [associative.reqmts].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD">NAD</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Currently the heterogeneous lookup in associative container are
enabled by presence of <code>is_transparent</code> nested type in the comparator
type (23.2.7 <a href="https://wg21.link/associative.reqmts">[associative.reqmts]</a>). This complicates the definition
of call wrapper types that want to define <code>is_transparent</code> if they wrap
a callable type that defines <code>is_transparent</code>, and requires the target
to be a complete type in cases where an incomplete type would otherwise be ok.
<p/>
Another problem is that users cannot add the <code>is_transparent</code> member to
a third-party comparison type that they do not control, even if they
know it supports heterogeneous comparisons.
<p/>
If the associative containers used a trait instead of checking for an
<code>is_transparent</code> member type then it would avoid the requirement for
complete types, and would allow customization of the trait without
modifying the comparator type. This would also be consistent with the
traits <code>is_placeholder</code> and <code>is_bind_expression</code>.
<p/>
For backward compatibility with the existing design, the default
implementation of the <code>is_transparent</code> trait could depend on the
presence of the <code>is_transparent</code> nested type.
</p>

<p><i>[2014-11 Urbana]</i></p>

<p>Move to LEWG</p>
<p>
Request for a new metafunction should first be responded to by LEWG.
</p>

<p><i>[2017-02 in Kona, LEWG recommends NAD]</i></p>

<p>In all discussions of heterogeneous lookup, the entire set of those 
discussions has been different integer types or string_view vs string. 
There actually hasn't been an example, that we are aware of, besides those two. 
-- Could always wrap the third-party type with the comparator? 
-- Could benefit from a motivating example. -- is_transparent&lt;&gt;, what does it mean?</p>

<p><i>[2017-06-02 Issues Telecon]</i></p>

<p>	The advantages of changing the API now are not sufficiently clear. 
We invite a paper presenting motivating examples and more details of the 
proposed change, but at present consider this Not A Defect.</p>
<p>Resolve as NAD</p>


<p id="res-2430"><b>Proposed resolution:</b></p>





</body>
</html>
