// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s static_assert(__has_builtin(__make_integer_seq), ""); template struct Seq { static constexpr T PackSize = sizeof...(I); }; template using MakeSeq = __make_integer_seq; static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); static_assert(__is_same(MakeSeq, Seq), ""); template using ErrorSeq = __make_integer_seq; // expected-error{{must have non-negative sequence length}} \ expected-error{{must have integral element type}} enum Color : int { Red, Green, Blue }; using illformed1 = ErrorSeq; // expected-note{{in instantiation}} using illformed2 = ErrorSeq; // expected-note{{in instantiation}} template void f() {} __make_integer_seq x; // expected-error{{template template parameter must be a class template or type alias template}} __make_integer_seq<__make_integer_seq, int, 10> PR28494; // expected-error{{different template parameters}} // expected-note@make_integer_seq.cpp:* {{template parameter has a different kind}} // expected-note@make_integer_seq.cpp:* {{previous template template parameter is here}}