1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
3 template<typename T
> using A
= int; // expected-note 2{{previous}}
4 template<typename T
> using A
= char; // expected-error {{type alias template redefinition with different types ('char' vs 'int')}}
5 template<typename T1
, typename T2
> using A
= T1
; // expected-error {{too many template parameters in template redeclaration}}
7 template<typename T1
, typename T2
> using B
= T1
; // expected-note {{previous}}
8 template<typename T2
, typename T1
> using B
= T1
; // expected-error {{type alias template redefinition with different types ('T1' (aka 'type-parameter-0-1') vs 'T1' (aka 'type-parameter-0-0'))}}
11 template<typename
> struct S
;
12 template<template<typename
> class F
> using FInt
= F
<int>;
13 template<typename X
> using SXRInt
= FInt
<S
<X
>::template R
>;
14 template<typename X
> using SXRInt
= typename S
<X
>::template R
<int>; // ok, redeclaration.
16 template<template<typename
> class> struct TT
;
18 namespace FilterLookup
{
19 TT
<A
> f(); // expected-note {{previous declaration is here}}
21 template<typename
> using A
= int;
22 TT
<A
> f(); // expected-error {{functions that differ only in their return type cannot be overloaded}}