http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57384

--- Comment #3 from Eric Niebler <eric.niebler at gmail dot com> ---
Interesting. I filed a similar bug against clang
(http://llvm.org/bugs/show_bug.cgi?id=16118), where Richard Smith seems to feel
the test cases should be:

  template<typename ...Ts>
  struct list
  {};

  template<typename ...Ts>
  struct S
  {
      using type1 = void(int...(Ts));    // (1) fails
      using type2 = list<int(Ts)...>;    // (2) works
      using type3 = void(int(*...)(Ts)); // (3) fails
      using type4 = list<int(*)(Ts)...>; // (4) works
  };

This strikes me as ludicrously inconsistent. I think we need guidance from the
committee here. I was basing my bug report(s) on the example in 8.3.5/13 (which
shows:

   template<typename... T> void f(T (* ...t)(int, int));

The suggestion that the pack expansion syntax differs depending on the context
in which the expansion occurs is, um, unsatisfactory.

Reply via email to