Поскольку вы упоминаете, что хотите изучать темное искусство метапрограммирования, я бы порекомендовал "Современный дизайн C ++" Андрея Александреску.
Мета-программирование является очень сложной областью и не требуется большую часть времени. Когда вы узнаете об этом, очень легко подумать, что это может решить все ваши проблемы. Это становится вашим новым любимым молотком.
Я бы также рекомендовал стать очень опытным пользователем библиотек, основанных на метапрограммировании, таких как boost и loki, прежде чем добавлять его в свой собственный код.
Два разных программиста использовали мета-программирование в тех частях кода, за которые я отвечаю. Хотя они были опытными программистами, коммерческий продукт не должен рассматриваться как игровая площадка. Это, вероятно, худшая область нашей кодовой базы сейчас, очень сложная и очень хрупкая, особенно когда вы добавляете поддержку новых компиляторов. Если бы я отвечал за код, когда они были написаны, их бы здесь не было, теперь их слишком дорого заменить.
Короче говоря, вам очень редко нужно мета-программирование, если вы не автор библиотеки. И вы не можете быть автором библиотеки, не будучи очень опытным пользователем библиотеки.