Inside a template, some constructs have semantics which may differ from one
instantiation to another
. Such a construct
depends
on the template parameters
. In particular, types and expressions may depend on the type
and/or
value of
template parameters (as determined by the template arguments) and this determines
the context for name lookup for certain names
. An expression may be
type-dependent
(that is, its type may depend on a template parameter) or
value-dependent
(that is, its value when evaluated as a constant expression (
[expr.const])
may depend on a template parameter)
as described below
.