What is the difference between type, value_type and element_type, and when to use each? : <p>I have written a template class that should expose its template parameter, but I am unsure of the appropriate naming.</p>

<p>I have found three different names for essentially the same thing (as far as I can tell):</p>

<ul>
<li>containers, e.g., <code>std::vector</code> use <code>value_type</code></li>
<li>smart pointers, e.g., <code>std::unique_ptr</code> use <code>element_type</code></li>
<li><code>std::reference_wrapper</code> uses just <code>type</code></li>
</ul>

<p>What is the idea behind these different names? What standard algorithms or trait classes depend on which name? Which name should I use for my class (something in between a smart pointer and reference wrapper)?</p>
