1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
3 template<typename T
> struct identity
;
4 template<typename
...Types
> struct tuple
;
6 template<typename T
, typename U
> struct is_same
{
7 static const bool value
= false;
10 template<typename T
> struct is_same
<T
, T
> {
11 static const bool value
= true;
14 // There is a syntactic ambiguity when an ellipsis occurs at the end
15 // of a parameter-declaration-clause without a preceding comma. In
16 // this case, the ellipsis is parsed as part of the
17 // abstract-declarator if the type of the parameter names a template
18 // parameter pack that has not been expanded; otherwise, it is parsed
19 // as part of the parameter-declaration-clause.
21 template<typename T
, typename
...Types
>
23 typedef identity
<T(Types
...)> function_pack_1
;
24 typedef identity
<T(Types
......)> variadic_function_pack_1
; // expected-warning {{varargs}} expected-note {{pack}} expected-note {{insert ','}}
25 typedef identity
<T(T
...)> variadic_1
;
26 typedef tuple
<T(Types
, ...)...> template_arg_expansion_1
;
31 // FIXME: Once function parameter packs are implemented, we can test all of the disambiguation