Можно ли передать данные как initializer_list в std :: массив структур?

У меня есть следующий код. По сути, я хочу инициализировать массив std :: массива не POD, используя синтаксис агрегированной инициализации. И g ++ 4.6, и 4.7 (последний недельный снимок) не могут скомпилировать код.

#include <array>

struct TheClass {

    int a1, a2;

    TheClass(int b1, int b2) : a1{b1}, a2{b2} {};    
};

template<unsigned D>
struct OtherClass {

    std::array<TheClass, D> a;

    OtherClass(std::array<TheClass, 2> b) : a{b} {};
};

int main()
{
    OtherClass<2>{{ {1, 2}, {2, 3} }}; //tried a lot of options here
}

Ошибки GCC:

v.cpp: In function ‘int main()’:
v.cpp:20:37: error: no matching function for call to ‘OtherClass<2u>::OtherClass(<brace-enclosed initializer list>)’
v.cpp:20:37: note: candidates are:
v.cpp:15:5: note: OtherClass<D>::OtherClass(std::array<TheClass, 2ul>) [with unsigned int D = 2u]
v.cpp:15:5: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘std::array<TheClass, 2ul>’
v.cpp:11:8: note: constexpr OtherClass<2u>::OtherClass(const OtherClass<2u>&)
v.cpp:11:8: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const OtherClass<2u>&’
v.cpp:11:8: note: constexpr OtherClass<2u>::OtherClass(OtherClass<2u>&&)
v.cpp:11:8: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘OtherClass<2u>&&’

Мои вопросы: правильный ли код приведен выше? Кажется, что так как std :: array является агрегатом, не должно быть проблем для конструирования его элементов данных. Может быть, это ошибка в GCC?

РЕДАКТИРОВАТЬ:

OtherClass<2>{{ TheClass{1, 2}, TheClass{2, 3} }}; работает, конечно, но я не хочу использовать это, поскольку я должен построить класс во многих местах. C ++ 11 должен поддерживать пропускTheClass, Также смэтот вопрос.

Ответы на вопрос(1)

Ваш ответ на вопрос