В языке есть только две категории типов, которые не могут иметь const-квалификации: ссылочные типы и типы функций. Таким образом, если const T
не может быть константным типом, это означает,T
это либо тип функции, либо ссылочный тип. Если вы можете исключить ссылочные типы, то у вас останутся только типы функций.
Обратите внимание, что тип функции, который содержит квалификатор cv, например int(int) const
, не является константным типом. Это пример «отвратительного типа функции», единственное реальное использование которого состоит в том, чтобы составлять или разлагать типы указателей на функции-члены. Тип int(int) const
не может быть получен путем добавления const-квалификации поверхint(int)
. Скорее, const
применяется к подразумеваемому параметру объекта.
!is_const
части.