This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/51723] New: [C++0x] delegating constructor ICE
- From: "andyg1001 at hotmail dot co.uk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sat, 31 Dec 2011 21:52:50 +0000
- Subject: [Bug c++/51723] New: [C++0x] delegating constructor ICE
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51723
Bug #: 51723
Summary: [C++0x] delegating constructor ICE
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: andyg1001@hotmail.co.uk
The following reduced code generates an ICE in gcc version 4.7.0 20111219:
template <int... V>
struct A
{
static constexpr int a[sizeof...(V)] = { V... };
};
template <int... V> constexpr int A<V...>::a[];
struct B
{
const int* const b;
template <unsigned int N>
constexpr B(const int(&b)[N])
: b(b)
{ }
template <int... V>
constexpr B(A<V...>)
: B(A<V...>::a) /* replace 'B' with 'b' to compile without ICE */
{ }
};
constexpr B works = A<10, 20, 30>::a; /* uses first ctor */
constexpr B causes_ice = A<10, 20, 30>(); /* uses second ctor */
The ICE occurs around the delegating constructor, but the code compiles
correctly if it is substituted for a non-delegating form of the constructor.
The message from gcc is:
ice.cpp: In instantiation of 'constexpr B::B(A<V ...>) [with int ...V = {10,
20, 30}]':
ice.cpp:25:40: required from here
ice.cpp:21:7: internal compiler error: in build_data_member_initialization, at
cp/semantics.c:5844
Please submit a full bug report,
with preprocessed source if appropriate.