Приезжайте в людей, считайте целую кавычку, считайте ее тщательно. Или еще лучше, прочитайте эссе.
Paul Graham критикует, среди прочего, подобный языкам C для того, чтобы не обеспечивать соответствующие средства абстракции. В рамках эссе его критика шаблонов является запоздалой мыслью, или скорее рассматриваемым вопросом для его основного аргумента. Его обоснование идет как это:
логично использовать общие стратегии решить повторяющиеся проблемы. На действительно абстрактных языках возможно формализовать те стратегии и поместить их в библиотеку. Каждый раз, когда необходимо использовать их, Вы просто #include их, инстанцировать их, развернуть их, или что бы то ни было. Подобный языкам C по контрасту не обеспечивают необходимые средства абстракции. Это засвидетельствовано тем, что там существует что-то как "шаблоны". Шаблон является такой общей стратегией, которой не может выразить код библиотеки и таким образом нужно выразительно записать каждый раз, когда это применяется.
Paul Graham не думает, что шаблоны являются злыми собой. Они - признак языков, которые терпят неудачу в обеспечении средств абстракции. В этом отношении он почти наверняка прав. Должны ли мы использовать различные языки из-за этого, конечно, другое обсуждение.
исходный плакат вопроса, с другой стороны, является неправильным: Шаблоны не являются "признаками не наличия недостаточной абстракции в Вашем коде", но являются признаками наличия недостаточного количества средств абстракции на Вашем языке.
Если вы хотите добавить копии элементов в B, вы можете сделать:
a.insert(a.end(), b.begin(), b.end());
Если вы хотите переместить элементы из B в конец A (одновременно опустошив B), вы можете сделать:
a.splice(a.end(), b);
В вашей ситуации сращивание было бы лучше, так как оно просто включает настройку пары указателей в связанных списках.