Потому, что C++ реально сложный язык. На данном этапе (лично моё мнение) - излишне переусложненный. Или скорее уже нагроможденный. И дальше лирика: Потому, что с одной стороны C++ _требует_ знания "чуть более" низкоуровневых вещей (не в плане ассемблера - тут о другом речь) - глубокое копирование, различие shared_ptr и т. д., не совсем явное поведение в случаях копирования/переносов выделенной памяти, и т. д, с другой имеет весьма непростой синтаксис (в т. ч. обязывающий соблюдать переносимость и "безконфликтность"). И это _ОЧЕНЬ_ сложно т. к. это старый в хорошем и плохом слове язык. Внедрять "новые фичи" крайне сложно, чтобы не порушить наследие. Поэтому зачастую конструкции и н-р те-же лямбды выглядят жутковато по сравнению с другими языками Отдельный превед любителям "метапрограммирования". Когда шаблон на шаблоне шаблоном погоняет. Есс-но в нормальном случае это нормально более-менее работает. Но не тогда, когда черезмерно злоупотребляют шаблонами. Пробовали когда-нибудь в отладке гонять "ферму" шаблонов? Отсюда выводы - не злоупотребляйте метапрограмм. Дело не совсем в языке, хоть языки и накладывают некоторые парадигмы.