С++ Type Traits

Я понимаю, что они кодируют информацию о типе, с которым вы их создаете, но как они работают? Скажем, например, черта типа std::is_class. Как он выполняет свою работу? Все реализации кажутся пустыми структурами, и я должен признать, что я почесываю голову.

Названия кажутся достаточно описательными, поэтому я могу понять, что они означают, но каковы типичные сценарии, которые используют черты типа?

Я не могу найти вводные ресурсы по этому вопросу (или вопросы по SO). Указатели будут оценены.

Ответ 1

Некоторые черты типа, такие как std::is_class, просто используют встроенные функции компилятора (ака встроенные). Вы не можете написать их самостоятельно без специальной поддержки от компилятора.

Типовые свойства в основном полезны в общем контексте - вы можете специализироваться на свойствах типов или накладывать ограничения на аргументы шаблона. Например, реализация std::copy может использовать std::memcpy внутренне вместо явного цикла, когда итераторы являются указателями на POD. Это может быть достигнуто с помощью SFINAE.