Я пытаюсь понять массив boost. code можно легко читать с сайта автора.
В обосновании проекта автор (Николай М. Йосуттис) отметил, что возможны следующие два типа инициализации.
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
В моем эксперименте с g++ (версия 4.1.2) работает строка 1, но строка 2 - нет. (Строка 2 дает следующее:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
Тем не менее, мой главный вопрос: как работает Line 1? Я попытался написать класс, похожий на array.hpp, и использовать инструкцию типа Line 1, но это не сработало:-( Ошибка:
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
Может кто-нибудь объяснить мне? Есть ли какая-то особая вещь, которая происходит в строке 1, о которой я должен знать?