On Linux x86_64
g++ --version:
g++ (Debian 20100117-1) 4.5.0 20100117 (experimental) [trunk revision 155979]
Compiling with:
g++ -O2 -g -std=c++0x -c test.cpp
The following program:
#include <vector>
#include <map>
struct Foo {
Foo() {}
template<typename Tp>
Foo(Tp *p) {}
};
void foo() {
std::map <int, std::vector<Foo>> the_map;
the_map[1] = std::vector<Foo>();
}
Produces the below error. However, it *doesn't* produce an error if compiled
without the -g switch (nor with -O1 instead of -O2).
In file included from /usr/include/c++/4.5.0/bits/move.h:38:0,
from /usr/include/c++/4.5.0/bits/stl_pair.h:60,
from /usr/include/c++/4.5.0/bits/stl_algobase.h:66,
from /usr/include/c++/4.5.0/vector:61,
from test.cpp:1:
/usr/include/c++/4.5.0/type_traits: In constructor 'std::vector<_Tp,
_Alloc>::vector(std::vector::size_type, const value_type&, const
allocator_type&) [with _Tp = Foo, _Alloc = std::allocator<Foo>,
std::vector::size_type = long unsigned int, value_type = Foo, allocator_type =
std::allocator<Foo>]':
/usr/include/c++/4.5.0/type_traits:224:67: instantiated from 'const bool
std::__is_constructible_helper<std::vector<Foo>, const int&&>::__value'
/usr/include/c++/4.5.0/type_traits:235:5: instantiated from
'std::is_constructible<std::vector<Foo>, const int&&>'
/usr/include/c++/4.5.0/bits/stl_map.h:451:11: instantiated from here
/usr/include/c++/4.5.0/type_traits:224:67: error: call of overloaded
'allocator()' is ambiguous
/usr/include/c++/4.5.0/bits/allocator.h:103:7: note: candidates are:
std::allocator<_Tp>::allocator(const std::allocator<_Tp>&) [with _Tp = Foo,
std::allocator<_Tp> = std::allocator<Foo>]
/usr/include/c++/4.5.0/bits/allocator.h:101:7: note:
std::allocator<_Tp>::allocator() [with _Tp = Foo]
/usr/include/c++/4.5.0/type_traits:224:67: error: call of overloaded
'allocator()' is ambiguous
/usr/include/c++/4.5.0/bits/allocator.h:103:7: note: candidates are:
std::allocator<_Tp>::allocator(const std::allocator<_Tp>&) [with _Tp = Foo,
std::allocator<_Tp> = std::allocator<Foo>]
/usr/include/c++/4.5.0/bits/allocator.h:101:7: note:
std::allocator<_Tp>::allocator() [with _Tp = Foo]
/usr/include/c++/4.5.0/type_traits:218:2: error: call of overloaded
'allocator()' is ambiguous
/usr/include/c++/4.5.0/bits/allocator.h:103:7: note: candidates are:
std::allocator<_Tp>::allocator(const std::allocator<_Tp>&) [with _Tp = Foo,
std::allocator<_Tp> = std::allocator<Foo>]
/usr/include/c++/4.5.0/bits/allocator.h:101:7: note:
std::allocator<_Tp>::allocator() [with _Tp = Foo]
--
Summary: call of overloaded 'allocator()' is ambiguous
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: foom at fuhm dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42797