<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - Some iterators non-standard"
   href="http://llvm.org/bugs/show_bug.cgi?id=19153">19153</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Some iterators non-standard
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libc++
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>All Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>stevemac@microsoft.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu, mclow.lists@gmail.com
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This is one of our MSVC STL tests.  I only looked up the back_insert_iterator
in the standard, but we are of the opinion that our test is standard.  If you
agree, we are happy to contribute the full test case which is listed at the
very bottom as a self-contained repro.  

Environment: 
clang version 3.5.0 (trunk 203997)
Target: x86_64-unknown-linux-gnu
Thread model: posix

N3797:
24.5.2.1 Class template back_insert_iterator
 [back.insert.iterator]
namespace std {
template <class Container>
class back_insert_iterator :
public iterator<output_iterator_tag,void,void,void,void>{

Repro Snippet (full repro at the end)
 typedef vector<int> vec_t;
    typedef iterator<output_iterator_tag, void, void, void, void> outit_t;
    typedef iterator<input_iterator_tag, int, ptrdiff_t, const int *, const
int&> istrit_t;
    typedef iterator<input_iterator_tag, char, streamoff, const char *, char>
istrbufit_t;
    typedef iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int&>
revit_t;

    static_assert(is_base_of<    outit_t,  back_insert_iterator<vec_t>    
<span class="quote">>::value,  "back_insert_iterator");</span >
    static_assert(is_base_of<    outit_t, front_insert_iterator<vec_t>    
<span class="quote">>::value, "front_insert_iterator");</span >
    static_assert(is_base_of<    outit_t,       insert_iterator<vec_t>    
<span class="quote">>::value,       "insert_iterator");</span >
    static_assert(is_base_of<    outit_t,  raw_storage_iterator<int *,
int>>::value,  "raw_storage_iterator");
    static_assert(is_base_of<istrbufit_t,   istreambuf_iterator<char>     
<span class="quote">>::value,   "istreambuf_iterator");</span >

Compile:
clang++ -std=c++11 -stdlib=libc++ -I/libcxx/include -L/libcxx/lib
is_base_of_iter.pass.cpp 

Thanks,
Steve MacKenzie
Microsoft Visual C++ Libraries

Here's the self contained repro:
#include <stddef.h>
#include <ios>
#include <iterator>
#include <memory>
#include <streambuf>
#include <type_traits>
#include <vector>
using namespace std;

int main() {
    typedef vector<int> vec_t;
    typedef iterator<output_iterator_tag, void, void, void, void> outit_t;
    typedef iterator<input_iterator_tag, int, ptrdiff_t, const int *, const
int&> istrit_t;
    typedef iterator<input_iterator_tag, char, streamoff, const char *, char>
istrbufit_t;
    typedef iterator<random_access_iterator_tag, int, ptrdiff_t, int *, int&>
revit_t;

    static_assert(is_base_of<    outit_t,  back_insert_iterator<vec_t>    
<span class="quote">>::value,  "back_insert_iterator");</span >
    static_assert(is_base_of<    outit_t, front_insert_iterator<vec_t>    
<span class="quote">>::value, "front_insert_iterator");</span >
    static_assert(is_base_of<    outit_t,       insert_iterator<vec_t>    
<span class="quote">>::value,       "insert_iterator");</span >
    static_assert(is_base_of<   istrit_t,      istream_iterator<int>      
<span class="quote">>::value,      "istream_iterator");</span >
    static_assert(is_base_of<    outit_t,      ostream_iterator<int>      
<span class="quote">>::value,      "ostream_iterator");</span >
    static_assert(is_base_of<    outit_t,  raw_storage_iterator<int *,
int>>::value,  "raw_storage_iterator");
    static_assert(is_base_of<istrbufit_t,   istreambuf_iterator<char>     
<span class="quote">>::value,   "istreambuf_iterator");</span >
    static_assert(is_base_of<    outit_t,   ostreambuf_iterator<char>     
<span class="quote">>::value,   "ostreambuf_iterator");</span >
    static_assert(is_base_of<    revit_t,      reverse_iterator<int *>    
<span class="quote">>::value,      "reverse_iterator");</span >


    // DevDiv#557214 "std::forward_iterator_tag derives from
std::output_iterator_tag"
    static_assert(is_base_of<input_iterator_tag, forward_iterator_tag>::value,
        "forward_iterator_tag should derive from input_iterator_tag");
    static_assert(is_base_of<forward_iterator_tag,
bidirectional_iterator_tag>::value,
        "bidirectional_iterator_tag should derive from forward_iterator_tag");
    static_assert(is_base_of<bidirectional_iterator_tag,
random_access_iterator_tag>::value,
        "random_access_iterator_tag should derive from
bidirectional_iterator_tag");

    static_assert(!is_base_of<output_iterator_tag, input_iterator_tag>::value,
        "input_iterator_tag should NOT derive from output_iterator_tag");
    static_assert(!is_base_of<output_iterator_tag,
forward_iterator_tag>::value,
        "forward_iterator_tag should NOT derive from output_iterator_tag");
    static_assert(!is_base_of<output_iterator_tag,
bidirectional_iterator_tag>::value,
        "bidirectional_iterator_tag should NOT derive from
output_iterator_tag");
    static_assert(!is_base_of<output_iterator_tag,
random_access_iterator_tag>::value,
        "random_access_iterator_tag should NOT derive from
output_iterator_tag");
}</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>