17 Templates [temp]

17.6 Name resolution [temp.res]

17.6.2 Dependent names [temp.dep]

17.6.2.3 Value-dependent expressions [temp.dep.constexpr]

За исключением описанного ниже, выражение, используемое в контексте, где требуется постоянное выражение, зависит от значения, если какое-либо подвыражение зависит от значения.

An id-expression зависит от значения, если:

  • это зависит от типа,

  • это имя параметра шаблона, не являющегося типом,

  • он называет статический член данных, который является зависимым членом текущего экземпляра и не инициализируется в a member-declarator,

  • он называет статическую функцию-член, которая является зависимым членом текущего экземпляра, или

  • это константа литерального типа и инициализируется выражением, зависящим от значения.

Выражения следующей формы зависят от значения, если unary-expressionили expression зависит от типа, или type-id зависит:

sizeof unary-expression
sizeof ( type-id )
typeid ( expression )
typeid ( type-id )
alignof ( type-id )
noexcept ( expression )

[ Note: Для стандартного библиотечного макроса offsetofсм [support.types].. ]end note

Выражения следующей формы являются значением-зависимой , если либо type-id или simple-type-specifier зависит , или , expression или cast-expression является значением в зависимости от:

simple-type-specifier ( expression-listopt )
static_cast < type-id > ( expression )
const_cast < type-id > ( expression )
reinterpret_cast < type-id > ( expression )
( type-id ) cast-expression

Выражения следующей формы зависят от значения:

sizeof ... ( identifier )
fold-expression

Выражение формы, в которой имена зависимых членов текущего экземпляра зависят от значения. Выражение вида также является значением-зависимым , если оценивать как успешно , и результат оценки относится к шаблонному объекту , который является объектом с длительностью статической или потоком хранения или функцией - члена. &qualified-idqualified-id &cast-expressioncast-expression core constant expression