The following code does not compile:

#include <list>
#include <utility>

using namespace std;

class A
{
        typedef list < pair <int, int> > PairList;

        // Works
        void f1 ( list < pair <int, int> > arg = PairList() )
        {
        }

        // Does not work
        void f2 ( list < pair <int, int> > arg = list < pair <int, int> > () )
        {
        }
};


testcase.cpp:14: error: expected ‘,’ or ‘...’ before ‘>’ token
testcase.cpp:14: error: wrong number of template arguments (1, should be 2)
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_pair.h:68:
error: provided for ‘template<class _T1, class _T2> struct std::pair’
testcase.cpp:14: error: template argument 1 is invalid
testcase.cpp:14: error: template argument 2 is invalid
testcase.cpp:14: error: default argument missing for parameter 2 of ‘void
A::f2(std::list<std::pair<int, int>, std::allocator<std::pair<int, int> > >,
int)’


-- 
           Summary: Default argument of type list < pair < A, B > > compiles
                    only when typedef is used
           Product: gcc
           Version: 4.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: photon at seznam dot cz
  GCC host triplet: Ubuntu Linux 7.04


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

Reply via email to