annotate clang/test/SemaCXX/cxx2a-template-lambdas.cpp @ 222:81f6424ef0e3 llvm-original

LLVM original branch
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 18 Jul 2021 22:10:01 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -std=c++2a -verify %s
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 template<typename, typename>
anatofuz
parents:
diff changeset
4 constexpr bool is_same = false;
anatofuz
parents:
diff changeset
5
anatofuz
parents:
diff changeset
6 template<typename T>
anatofuz
parents:
diff changeset
7 constexpr bool is_same<T, T> = true;
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 template<typename T>
anatofuz
parents:
diff changeset
10 struct DummyTemplate { };
anatofuz
parents:
diff changeset
11
anatofuz
parents:
diff changeset
12 void func() {
anatofuz
parents:
diff changeset
13 auto L0 = []<typename T>(T arg) {
anatofuz
parents:
diff changeset
14 static_assert(is_same<T, int>); // expected-error {{static_assert failed}}
anatofuz
parents:
diff changeset
15 };
anatofuz
parents:
diff changeset
16 L0(0);
anatofuz
parents:
diff changeset
17 L0(0.0); // expected-note {{in instantiation}}
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 auto L1 = []<int I> {
anatofuz
parents:
diff changeset
20 static_assert(I == 5); // expected-error {{static_assert failed}}
anatofuz
parents:
diff changeset
21 };
anatofuz
parents:
diff changeset
22 L1.operator()<5>();
anatofuz
parents:
diff changeset
23 L1.operator()<6>(); // expected-note {{in instantiation}}
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 auto L2 = []<template<typename> class T, class U>(T<U> &&arg) {
anatofuz
parents:
diff changeset
26 static_assert(is_same<T<U>, DummyTemplate<float>>); // // expected-error {{static_assert failed}}
anatofuz
parents:
diff changeset
27 };
anatofuz
parents:
diff changeset
28 L2(DummyTemplate<float>());
anatofuz
parents:
diff changeset
29 L2(DummyTemplate<double>()); // expected-note {{in instantiation}}
anatofuz
parents:
diff changeset
30 }
anatofuz
parents:
diff changeset
31
anatofuz
parents:
diff changeset
32 template<typename T> // expected-note {{declared here}}
anatofuz
parents:
diff changeset
33 struct ShadowMe {
anatofuz
parents:
diff changeset
34 void member_func() {
anatofuz
parents:
diff changeset
35 auto L = []<typename T> { }; // expected-error {{'T' shadows template parameter}}
anatofuz
parents:
diff changeset
36 }
anatofuz
parents:
diff changeset
37 };
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 template<typename T>
anatofuz
parents:
diff changeset
40 constexpr T outer() {
anatofuz
parents:
diff changeset
41 return []<T x>() { return x; }.template operator()<123>(); // expected-error {{no matching member function}} \
anatofuz
parents:
diff changeset
42 expected-note {{candidate template ignored}}
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44 static_assert(outer<int>() == 123);
anatofuz
parents:
diff changeset
45 template int *outer<int *>(); // expected-note {{in instantiation}}