[LLVMbugs] [Bug 12027] New: std::map<S, T>::erase(iterator) is ambiguous if S has a template constructor

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Feb 17 08:57:31 PST 2012


http://llvm.org/bugs/show_bug.cgi?id=12027

             Bug #: 12027
           Summary: std::map<S,T>::erase(iterator) is ambiguous if S has a
                    template constructor
           Product: libc++
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: All Bugs
        AssignedTo: hhinnant at apple.com
        ReportedBy: SebastianLuther at gmx.de
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


The following code is a reduced test case from boost.signals. gcc-4.5 accepts
it without warning.

###############################################
#include <map>

struct S
{
   template<typename T>
   S(const T& t) {}
};

void test()
{
  typedef std::map<S,int> Map;
  Map m;
  Map::iterator it;
  m.erase(it);
}
###############################################

# clang++ -std=c++0x -stdlib=libc++ -c test-case.cpp 
test-case.cpp:15:5: error: call to member function 'erase' is ambiguous
  m.erase(it);
  ~~^~~~~
/usr/include/c++/v1/map:964:14: note: candidate function
    iterator erase(const_iterator __p) {return __tree_.erase(__p.__i_);}
             ^
/usr/include/c++/v1/map:966:15: note: candidate function
    size_type erase(const key_type& __k)
              ^
/usr/include/c++/v1/map:969:15: note: candidate function not viable: requires 2
arguments, but 1 was provided
    iterator  erase(const_iterator __f, const_iterator __l)
              ^
1 error generated.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list