Value dependence underspecified
Section [temp.dep.constexpr]
Maxim Kartashev

Created on 2015-03-26.00:00:00 last changed 49 months ago


Date: 2015-09-15.00:00:00

Proposed resolution (September, 2015):

Change [temp.dep.constexpr] paragraph 2 as follows:

An id-expression is value-dependent if:

  • it is a name declared with a dependent type type-dependent,

  • it is the name of a non-type template parameter,

  • it names a member of an unknown specialization,

  • ...

This resolution also resolves issue 2066.

Date: 2016-02-15.00:00:00

[Adopted at the February, 2016 meeting.]

In the following example,

  struct A {};

  struct X {
     template <typename Q>
     int memfunc();

  template <int (X::* P) ()> int foo(...);

  template<class T> struct B {
     static int bar() {
       A a;
       return foo<&X::memfunc<T> >(a);

  template <int (X::* P) ()>  int foo(A a) { return 0; }

  int main()  {
     return B<int>::bar();

the call foo<&X::memfunc<T> >(a); is dependent only if the template argument is dependent, which is only true because of the use of the template parameter T. Implementations generally agree that this is dependent, but there does not appear to be wording to support this determination.

Date User Action Args
2017-02-06 00:00:00adminsetstatus: tentatively ready -> cd4
2015-11-10 00:00:00adminsetmessages: + msg5612
2015-11-10 00:00:00adminsetstatus: drafting -> tentatively ready
2015-03-26 00:00:00admincreate