https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65332

            Bug ID: 65332
           Summary: [5 Regression] error: expected template-name before
                    ‘<’ token
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: trippels at gcc dot gnu.org
                CC: jason at gcc dot gnu.org

The testcase from PR65328 shows:

markus@x4 fatal % cat transform.ii
namespace std
{
typedef int size_t;
template <typename _Tp> struct numeric_limits
{
  static constexpr _Tp
  max ()
  {
    return 0;
  }
};
}

template <typename> using identity_transform = int;
template <template <typename> class> struct transform_sequence;
namespace detail
{
namespace recursive_transform_impl
{
template <int, int, template <typename> class, template <typename> class,
          template <typename> class,
          template <typename, template <typename> class> class,
          template <typename> class>
struct recurse;
}
}
template <template <typename> class TPredicate,
          template <typename, template <typename> class> class TTransformer,
          template <typename> class... TTransforms>
struct A
{
  template <template <typename> class TPreTransform = identity_transform,
            template <typename> class TPostTransform = identity_transform,
            std::size_t = std::numeric_limits<std::size_t>::max ()>
  using with = detail::recursive_transform_impl::
      recurse<0, 0, TPreTransform, TPostTransform, TPredicate, TTransformer,
              transform_sequence<TTransforms...>::template apply>;
  using apply = typename with<>::template apply<>;
};

markus@x4 fatal % g++ -std=c++11 -c transform.ii
transform.ii:38:48: error: expected template-name before ‘<’ token
   using apply = typename with<>::template apply<>;
                                                ^
transform.ii:38:48: error: expected identifier before ‘<’ token

4.8, 4.9, EDG and clang accept the code.

Reply via email to