const_iterator type of a container of const types
<p>If I compile the code below:</p>

<pre><code>#include &lt;list&gt;

using iter_t = std::list&lt;const unsigned&gt;::const_iterator;

int main(int, char**) {
  return 0;
}
</code></pre>

<p>I get the following compile error:</p>

<pre><code>In file included from /usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/x86_64-apple-darwin13.4.0/bits/c++allocator.h:33:0,
             from /usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/bits/allocator.h:46,
             from /usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/list:61,
             from main.cpp:1:
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/ext/new_allocator.h: In instantiation of 'class __gnu_cxx::new_allocator&lt;const unsigned int&gt;':
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/bits/allocator.h:92:11:   required from 'class std::allocator&lt;const unsigned int&gt;'
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/bits/stl_list.h:315:9:   required from 'class std::_List_base&lt;const unsigned int, std::allocator&lt;const unsigned int&gt; &gt;'
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/bits/stl_list.h:447:11:   required from 'class std::list&lt;const unsigned int&gt;'
main.cpp:3:41:   required from here
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/ext/new_allocator.h:93:7: error: 'const _Tp* __gnu_cxx::new_allocator&lt;_Tp&gt;::address(__gnu_cxx::new_allocator&lt;_Tp&gt;::const_reference) const [with _Tp = const unsigned int; __gnu_cxx::new_allocator&lt;_Tp&gt;::const_pointer = const unsigned int*; __gnu_cxx::new_allocator&lt;_Tp&gt;::const_reference = const unsigned int&amp;]' cannot be overloaded
   address(const_reference __x) const _GLIBCXX_NOEXCEPT
   ^
/usr/local/Cellar/gcc/4.9.2_1/include/c++/4.9.2/ext/new_allocator.h:89:7: error: with '_Tp* __gnu_cxx::new_allocator&lt;_Tp&gt;::address(__gnu_cxx::new_allocator&lt;_Tp&gt;::reference) const [with _Tp = const unsigned int; __gnu_cxx::new_allocator&lt;_Tp&gt;::pointer = const unsigned int*; __gnu_cxx::new_allocator&lt;_Tp&gt;::reference = const unsigned int&amp;]'
   address(reference __x) const _GLIBCXX_NOEXCEPT
   ^
</code></pre>

<p>I get roughly the same error message if I change the container type from <code>std::list</code> to <code>std::vector</code>, <code>std::deque</code> or <code>std::forward_list</code>. If I change the template argument from <code>const unsigned</code> to <code>unsigned</code> it compiles fine.</p>

<p>What's going on here? I can't see why it wouldn't compile.</p>