------- Comment #2 from bangerth at dealii dot org 2006-08-13 00:26 -------
The code is invalid (because there is no constructor s::s(s*)), but
we can make the code valid and still ICE:
--------------------------
namespace N
{
struct A { A(A*); };
void foo(const A &);
}
template<typename T> void g()
{
N::A *p;
N::foo(A(p));
}
-----------------
g/x> c++ -c x.cc
x.cc: In function 'void g()':
x.cc:10: internal compiler error: in type_dependent_expression_p, at
cp/pt.c:12603
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.suse.de/feedback> for instructions.
The point of the exercise is that in the template, we have A(p); since
p is of type N::A*, we need to look up A in namespace A as well, so the
conversion constructor A(p) should be valid, should yield an object of
type N::A, which can be bound to the argument of N::foo.
W.
--
bangerth at dealii dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bangerth at dealii dot org
Keywords| |ice-on-valid-code
Target Milestone|4.0.4 |4.1.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28705