Где некоторые реализации в заголовочном файле ?

#c

#c

Вопрос:

Я видел некоторую реализацию в заголовочном файле <type_traits>, но есть некоторые реализации, которые я не смог найти, например:

 // STRUCT TEMPLATE is_class
template <class _Ty>
struct is_class : bool_constant<__is_class(_Ty)> {}; // determine whether _Ty is a class

template <class _Ty>
_INLINE_VAR constexpr bool is_class_v = __is_class(_Ty);
  

Я хотел бы знать реализацию __is_class .
Кто-нибудь знает, где находится реализация? Я использую среду IDE с именем Visual studio 2019.

Комментарии:

1. Я не слишком знаком с VS, но я подозреваю, что __is_class это встроенная функция, распознанная компилятором, которая не имеет определения C . Похоже, это задокументировано на этой странице в документах MS compiler.

Ответ №1:

Эти символы относятся к зарезервированным встроенным токенам, которые распознаются и оцениваются самим компилятором. Компилятор знает, что __is_class означает, оценивает его для данного типа, а затем использует результаты оценки.

Так получилось, что gcc прекрасно документирует свои встроенные символы здесь (это для gcc 10.2, другие версии gcc имеют практически ту же страницу). РЕДАКТИРОВАТЬ: вот та же страница для VS — судя по всему, почти то же самое.

На этой странице где-нибудь вы найдете __is_class определение вашей функции для gcc. Другие компиляторы, как правило, заставляют вещи работать одинаково, возможно, изменяя только имена самих символов.

Подводя итог, вы не найдете __is_class и других, формально определенных ни в одном заголовочном файле. Эти функции, классы и т. Д. встроены в сам компилятор.

Комментарии:

1. В OP упоминалось, что они используют VS2019, поэтому эта страница может быть более подходящей ссылкой для соответствующих встроенных символов.

2. Да, похоже, в основном это одно и то же…