CWG Issue 2066 (original) (raw)

This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 117a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2025-04-13


2066. Does type-dependent imply value-dependent?

Section: 13.8.3.4 [temp.dep.constexpr]Status: CD4Submitter: Richard SmithDate: 2015-01-09

[Adopted at the February, 2016 meeting.]

Consider the following example:

template struct X { typedef int type; }; template struct Y { void f() { X<false ? this - this : 0>::type x; } // missing typename? }; void g() { Y().f(); }

This appears to be valid because the template argument expression is not value-dependent.

Until I discovered this, I had been assuming that any type-dependent expression is also value-dependent. The only exception to that appears to be the expression this, which may be type-dependent but is never value-dependent.

Now, this need not ever be value-dependent, because evaluation of it will never succeed when it appears as a subexpression of an expression that we're checking for constant-expression-ness. But if that's really what we want here, then the same applies to function parameters with dependent types, and probably a few other cases.

Proposed resolution (September, 2015) [SUPERSEDED]:

Change 13.8.3.4 [temp.dep.constexpr] paragraph 4 as follows:

Expressions of the following form are value-dependent:

sizeof ... ( identifuer )
this
fold-expression

Proposed resolution (March, 2016):

This issue is resolved by the resolution ofissue 2109.