Позвольте мне начать с объяснения того, что я имею в виду под "магией". Я буду использовать два примера из Java:
- Каждый класс наследует (прямо или косвенно) класс
Object
. - Перегрузка оператора не поддерживается Java, но оператор
+
определен для объектовString
.
Это означает, что невозможно реализовать реализацию классов Object
и String
в чистой (*) Java. Теперь это то, что я имею в виду под "магией": для реализации этих классов вам понадобится специальная поддержка от компилятора.
Что мне всегда нравилось в С++, так это то, что, насколько мне известно, в STL нет такой "магии", т.е. можно реализовать STL в чистом С++.
Теперь мой вопрос: это правда? Или есть части STL, которые не могут быть реализованы в чистом С++ и нуждаются в некоторой "волшебной" /специальной поддержке компилятора?
(*) С "чистым" я имею в виду без использования каких-либо библиотек классов.