Здравствуйте ssi, Вы писали:
>Если у ab убрать конструкор и написать
ssi> foo<ab, 2> theFoo = { 1, 2, 1, 2 };
ssi>все компилируется.
Вот что написано по сему вопросу в стандарте (8.5.1):
An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected nonstatic data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).
...
When an aggregate is initialized the initializer can be an initializer-clause
consisting of a braceenclosed, comma-separated list of initializers for the members of the aggregate, written in increasing subscript or member order. If the aggregate contains subaggregates, this rule applies recursively to the members of the subaggregate.
Таким образом, мы видим, что ab не является агрегатом, и соответственно, все правильно. Ну а когда убираем конструктор, то все становится на свои места, и такая запись проходит.
Здравствуйте Kaa, Вы писали:
Kaa>Вот что написано по сему вопросу в стандарте (8.5.1): Kaa>
Kaa>An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected nonstatic data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).
Kaa>...
Kaa>When an aggregate is initialized the initializer can be an initializer-clause
Kaa>consisting of a braceenclosed, comma-separated list of initializers for the members of the aggregate, written in increasing subscript or member order. If the aggregate contains subaggregates, this rule applies recursively to the members of the subaggregate.
Kaa>Таким образом, мы видим, что ab не является агрегатом, и соответственно, все правильно. Ну а когда убираем конструктор, то все становится на свои места, и такая запись проходит.
Да, действительно, ab не является агрегатом (стандарт я читал), но какое это имеет отношение к приведенному случаю, initializers for the members of the aggregate могут быть чем угодно, в том числе, естественно, и не агрегатами.
Здравствуйте Kaa, Вы писали:
Kaa>Здравствуйте ssi, Вы писали:
>>Если у ab убрать конструкор и написать Kaa>
ssi>> foo<ab, 2> theFoo = { 1, 2, 1, 2 };
Kaa>
ssi>>все компилируется.
Kaa>Вот что написано по сему вопросу в стандарте (8.5.1): Kaa>
Kaa>An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected nonstatic data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).
Kaa>...
Kaa>When an aggregate is initialized the initializer can be an initializer-clause
Kaa>consisting of a braceenclosed, comma-separated list of initializers for the members of the aggregate, written in increasing subscript or member order. If the aggregate contains subaggregates, this rule applies recursively to the members of the subaggregate.
Kaa>Таким образом, мы видим, что ab не является агрегатом, и соответственно, все правильно. Ну а когда убираем конструктор, то все становится на свои места, и такая запись проходит.
'ab' действительно не является агрегатом. Но к данному вопросу это отношения не имеет. Агрегатным инициализатором в данном примере инициализируется 'foo<ab, 2>', а не 'ab'. А 'foo<ab, 2>' агрегатом является. Как и, например, 'ab[2]'. Ложное сообшение об ошибке вызвано ошибкой в самом MS-овском компиляторе.
Здравствуйте Павел Кузнецов, Вы писали:
ssi>>Почему CL не компилирует следующий код (вроде все законно):
ПК>Потому что CL содержит ошибку.
Как же жить дальше, я так привык к CL, перейти на GCC немогу, так как SGI STL не поддерживает
<iostream>, а у меня все проги его юзают (ИМЕННО <iostream> БЕЗ .h).
Здравствуйте ssi, Вы писали:
ssi>>>Почему CL не компилирует следующий код (вроде все законно):
ПК>>Потому что CL содержит ошибку.
ssi>Как же жить дальше, я так привык к CL,
Ну, если уж инициализация агрегатов такя проблема...
ssi>перейти на GCC немогу, так как SGI STL не поддерживает <iostream>, а у меня все проги его юзают (ИМЕННО <iostream> БЕЗ .h).
Почему не поддерживает? Используй новый gcc (например, mingw 3.2) или STLport.
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте Юнусов Булат, Вы писали:
ssi>>я просто хочу использовать boost::array
ЮБ>Так cl же с ним нормально обращается
У меня cl 12.00.8804, и как было описано выше, выдает ошибку, если в качестве элемента агрегата boost::array взять объект класса (структуры, объединения), содержащего конструктор.
У Вас либо какой-то супер-пупер cl, либо вы просто использовали объекты, класс которых не содержит конструктора (напр. стандартные типы данных).
Здравствуйте ssi, Вы писали:
ssi> У Вас либо какой-то супер-пупер cl, либо вы просто использовали объекты, класс которых не содержит конструктора (напр. стандартные типы данных).
Здравствуйте, Павел Кузнецов, Вы писали:
ssi>>перейти на GCC немогу, так как SGI STL не поддерживает <iostream>, а у меня все проги его юзают (ИМЕННО <iostream> БЕЗ .h).
ПК>Почему не поддерживает? Используй новый gcc (например, mingw 3.2) или STLport.
Спасибо за дельный совет!
Скачал STLport, использую. Перешол на GCC ради boost'а.
Появились глупые вопросы по компилятору:
1. хочу подключить некий заголовочный файл во все компилируемые файлы "проекта", используя опцию GCC -include, почему этот заголовочный файл не ищется по путям инклюдников (опция -I)?
приходиться указывать полный путь, что неудобно;
2. тоже касательно библиотеки user32.lib (например), хочу ее подлинковать к "проекту", однако она не ищется в путях библиотек (опция -L), так ее имя не в формате lib*.a?