http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59042

            Bug ID: 59042
           Summary: Declaration of back_insert_iterator::value_type is
                    incorrect
           Product: gcc
           Version: 4.8.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cdodd at acm dot org

The declaration of std::back_insert_iterator::value_type is incorrect in the
header file.  The following small test program should compile without errors or
warnings, demonstrating the problem:

    #include <iostream>
    #include <iterator>
    #include <vector>

    template<class OutputIterator>
    void output(OutputIterator &&iter, typename OutputIterator::value_type val)
    {
        *iter++ = val;
    }

    int main()
    {
        std::vector<int>    vec;
        output(back_inserter(vec), 10);
        std::cout << vec.size() << std::endl;
        return 0;
    }

The fix is quite trivial -- just fix the declaration in the header file:

--- libstdc++-v3/include/bits/stl_iterator.h-orig    2013-11-07
10:11:54.991166661 -0800
+++ libstdc++-v3/include/bits/stl_iterator.h    2013-11-07 10:05:40.414571676
-0800
@@ -400,7 +400,7 @@
   */
   template<typename _Container>
     class back_insert_iterator
-    : public iterator<output_iterator_tag, void, void, void, void>
+    : public iterator<output_iterator_tag, typename _Container::value_type,
void, void, void>
     {
     protected:
       _Container* container;


There are probably other places in the library that have similar problems
(front_insert_iterator)

Reply via email to