За исключением случаев, описанных ниже, выражение зависит от типа, если какое-либо подвыражение зависит от типа.
Зависит от id-expression типа, если он содержит
identifier , связанный с именем поиска с одним или более деклараций объявлен с зависимым типом,
identifier , связанный с именем поиска с не-типа template-parameter объявлена с типом , который содержит placeholder type,
identifier, связанный с именем поиска с одним или более деклараций функций членов текущего экземпляра объявленных с типом возвращаемого , который содержит тип заполнителя,
identifier, связанный с именем поиском с structured binding declaration которого brace-or-equal-initializerявляется типом-зависимым,
identifier __func__, где любая вмещающих функция представляет собой шаблон, член шаблона класса, или общая лямбду,
template-id , что зависит,
a, conversion-function-id который указывает зависимый тип, или
a nested-name-specifier или a, в qualified-id котором упоминается член неизвестной специализации;
или если он называет зависимый член текущего экземпляра, который является статическим элементом данных типа «массив неизвестных границ T» для some T ([temp.static]). Выражения следующих форм зависят от типа, только если тип, указанный с помощью type-id, simple-type-specifier или new-type-id является зависимым, даже если любое подвыражение зависит от типа:
simple-type-specifier ( expression-listopt ) ::opt new new-placementopt new-type-id new-initializeropt ::opt new new-placementopt ( type-id ) new-initializeropt dynamic_cast < type-id > ( expression ) static_cast < type-id > ( expression ) const_cast < type-id > ( expression ) reinterpret_cast < type-id > ( expression ) ( type-id ) cast-expression
Выражения следующих форм никогда не зависят от типа (поскольку тип выражения не может быть зависимым):
literal postfix-expression . pseudo-destructor-name postfix-expression -> pseudo-destructor-name sizeof unary-expression sizeof ( type-id ) sizeof ... ( identifier ) alignof ( type-id ) typeid ( expression ) typeid ( type-id ) ::opt delete cast-expression ::opt delete [ ] cast-expression throw assignment-expressionopt noexcept ( expression )
[ Note: Для стандартного библиотечного макроса offsetofсм [support.types].. ] — end note
A class member access expression зависит от типа, если выражение относится к члену текущего экземпляра, а тип указанного члена является зависимым, или если выражение доступа к члену класса относится к члену неизвестной специализации. [ Note: В выражении формы x.y или xp->y типа выражения обычно является тип члена y класса x (или класса, на который указывает xp). Однако, если x или xp относится к зависимому типу, который не является текущим экземпляром, тип y всегда является зависимым. Если x или xp относится к независимому типу или относится к текущему экземпляру, тип y является типом выражения доступа к члену класса. ] — end note
A braced-init-listзависит от типа, если какой-либо элемент зависит от типа или является расширением пакета.