1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
23e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith
33e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smithnamespace Old {
43e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<template<class> class TT> struct X { };
53e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<class> struct Y { };
63e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<class T> using Z = Y<T>;
73e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  X<Y> y;
83e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  X<Z> z;
93e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith
103e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  using SameType = decltype(y); // expected-note {{here}}
113e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  using SameType = decltype(z); // expected-error {{different types}}
123e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith}
133e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith
143e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smithnamespace New {
153e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<class T> struct X { };
163e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<class> struct Y { };
173e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  template<class T> using Z = Y<T>;
183e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  X<Y<int>> y;
193e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  X<Z<int>> z;
203e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith
213e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  using SameType = decltype(y);
223e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith  using SameType = decltype(z); // ok
233e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith}
24