Здравствуйте, alex_public, Вы писали:
_>А что не так со встроенными массивами? )
В том виде, в каком они пришли из C — это вредительство, ИМХО. Ну хотя бы убрать пресловутое "разложение до указателя" хотя бы в 2003 было можно. Например, в неявном виде передавать после указателя на первый элемент длину — примерно так же, как явно делают в C при передаче массива в функцию:
/* C */
void foo(int* data, size_t size);
// C++
void foo(int data[]) // а на самом деле в функцию передавалось бы то же, что и выше!
{
size_t n = std::array_length(data); // например
// ...
}
_>Насчёт optional... Ну всё же это некий контейнер, так что некие аналогии (скажем с xxx_ptr) имеются. )
Не аргумент. std::vector — тоже контейнер, но он не притворяется указателем ни в каком виде, и нужно слегка постараться, чтобы получить "указатель на элемент".
_>Кстати, например в D добавление в массив реализуется оператором "=+" — всё вполне удобно. )
operator+= или operator=+ ?

Вот не нагуглил за 5 минут по теме D operator+= или D operator=+, "Александреску, друг, прости, свой D подальше запусти"(с) Если существует в D operator=+, и он именно используется
именно для конкатенации — да на здоровье, вот в Haskell, ЕМНИП, есть оператор конкатенации ++, в Perl конкатенация строк идет через оператор . (точка)
Это я к тому, что оператор "увеличить на значение" и оператор "конкатенация" должны, ИМХО, различаться. "Разные вещи должны выглядеть по-разному, схожие — одинаково".
Кажется, Страуструп писал, что operator<< и operator>> были использованы для ввода/вывода из-за того, что в современной программе практически невозможно будет встретить применение встроенных операторов сдвига. Уже приходилось встречать коллег, которые на вопрос "что делает оператор >>?" бодро отвечали "ввод данных из потока"
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)