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.