6

I wanted to create an array:

template < typename T, typename ... A > struct a {
  T x [1 + sizeof... (A)];
  a () = default;
  a (T && t, A && ... y) : x { t, y... } {}
};

int main () {
  a < int, int > p { 1, 1 }; // ok
  a < a < int, int >, a < int, int > > q { { 1, 1 }, { 3, 3 } }; // error: bad array initializer
}

Why doesn't it compile? (tested with g++ 4.6)

0

1 Answer 1

2

I'm pretty sure that's a bug. {} can be used in place of () for supplying the constructor with arguments. Therefore your code should be ok:

int main ()
{
    // this is fine, calls constructor with {1, 1}, {3, 3}
    a<a<int, int>, a<int, int>> q({ 1, 1 }, { 3, 3 });

    // which in turn needs to construct a T from {1, 1},
    // which is fine because that's the same as:
    a<int, int>{1, 1}; // same as: a<int, int>(1, 1);

    // and that's trivially okay (and tested in your code)

    // we do likewise with A..., which is the same as above
    // except with {3, 3}; and the values don't affect it
}

So the whole thing should be okay.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.