Как минимум тем, что 1 вариант свободен от всяких "намеков" на возможную реализацию, и является сущностью фундаментальной (т.е., например, в паскале в те времена это была не конструкция не воспроизводимая с помощью других (конструкций ЯП) -т.е. не являлась просто языковым сахаром).Во втором варианте вы моделируете эту сущность с помощью другого понятия (шаблон).
То есть различие только в том, что в первом случае эти конструкции вшиты в синтаксис языка. Это минимальное и не интересное отличие. Ну например хотя бы из за того, что вся стандартная библиотека плюсов, по стандарту языка, может быть вшита в компилятор (то есть отдельных файликов iostream, string и так далее может в природе вообще не существовать). Так что и этот Array точно также может быть туда вшит.
Гм. Пример: dynamic_cast<A>(b); -- явно шаблонная плюсовая функция, однако её объявления и определения в заголовочных файлах не найти. Она вшита, согласно стандарту, в компилятор.
В любом случае, это отличие в реализации сущности, а не в её сути.