Добавлен вариант стандартной библиотеки, основанный на лямбде.

Возможно, требуется переделать его с использованием макросов и
метапрограммирования.
Удалил лишние виртуальные функции проверки типа.
Использование pragma once