1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace std {
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  template<typename RandomAccessIterator>
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void sort(RandomAccessIterator first, RandomAccessIterator last);
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  template<class X, class Y>
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  X* dyn_cast(Y *Val);
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass Foo {
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  template<typename T> T &getAs();
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f() {
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  std::sort(1, 2);
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  Foo().getAs<int>();
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:15:8 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK-CC1: dyn_cast<<#class X#>>(<#Y *Val#>)
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK-CC1: sort(<#RandomAccessIterator first#>, <#RandomAccessIterator last#>
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:16:9 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK-CC2: getAs<<#typename T#>>()
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao)
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
24