Date
2016-02-15.00:00:00
Message id
3543

Content

[Adopted at the February, 2016 meeting.]

The rationale for the restriction in 13.7.6.1 [temp.spec.partial.general] bullet 9.1 is not clear:

  • A partially specialized non-type argument expression shall not involve a template parameter of the partial specialization except when the argument expression is a simple identifier. [Example:

  •   template <int I, int J> struct A {};
      template <int I> struct A<I+5, I*2> {}; // error
      template <int I, int J> struct B {};
      template <int I> struct B<I, I> {};     // OK
    

    end example]

In the example, it's clear that I is non-deducible, but this rule prevents plausible uses like:

  template <int I, int J> struct A {};
  template <int I> struct A<I, I*2> {};

(See also issues 1647, 2033, and 2127.)