p13.cpp revision 8e8fb3be5bd78f0564444eca02b404566a5f3b5d
1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// RUN: %clang_cc1 -fsyntax-only -verify %s
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// expected-no-diagnostics
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// The scope of atemplate-parameterextends from its point of
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// declaration until the end of its template. In particular, a
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// template-parameter can be used in the declaration of subsequent
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// template-parameters and their default arguments.
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<class T, T* p, class U = T> class X { /* ... */ };
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// FIXME: template<class T> void f(T* p = new T);
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Check for bogus template parameter shadow warning.
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<template<class T> class,
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath         template<class T> class>
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  class B1noshadow;
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath