Clang Project

clang_source_code/test/CXX/drs/dr12xx.cpp
1// RUN: %clang_cc1 -std=c++98 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
2// RUN: %clang_cc1 -std=c++11 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
3// RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
4// RUN: %clang_cc1 -std=c++1z %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
5
6namespace dr1213 { // dr1213: 7
7#if __cplusplus >= 201103L
8  using T = int[3];
9  int &&r = T{}[1];
10
11  using T = decltype((T{}));
12  using U = decltype((T{}[2]));
13  using U = int &&;
14
15  // Same thing but in a case where we consider overloaded operator[].
16  struct ConvertsToInt {
17    operator int();
18  };
19  struct X { int array[1]; };
20  using U = decltype(X().array[ConvertsToInt()]);
21
22  // We apply the same rule to vector subscripting.
23  typedef int V4Int __attribute__((__vector_size__(sizeof(int) * 4)));
24  typedef int EV4Int __attribute__((__ext_vector_type__(4)));
25  using U = decltype(V4Int()[0]);
26  using U = decltype(EV4Int()[0]);
27#endif
28}
29
30namespace dr1250 { // dr1250: 3.9
31struct Incomplete;
32
33struct Base {
34  virtual const Incomplete *meow() = 0;
35};
36
37struct Derived : Base {
38  virtual Incomplete *meow();
39};
40}
41
42namespace dr1265 { // dr1265: 5
43#if __cplusplus >= 201103L
44  auto a = 0, b() -> int; // expected-error {{declaration with trailing return type must be the only declaration in its group}}
45  auto b() -> int, d = 0; // expected-error {{declaration with trailing return type must be the only declaration in its group}}
46  auto e() -> int, f() -> int; // expected-error {{declaration with trailing return type must be the only declaration in its group}}
47#endif
48
49#if __cplusplus >= 201402L
50  auto g(), h = 0; // expected-error {{function with deduced return type must be the only declaration in its group}}
51  auto i = 0, j(); // expected-error {{function with deduced return type must be the only declaration in its group}}
52  auto k(), l(); // expected-error {{function with deduced return type must be the only declaration in its group}}
53#endif
54}
55
56namespace dr1295 { // dr1295: 4
57  struct X {
58    unsigned bitfield : 4;
59  };
60
61  X x = {1};
62
63  unsigned const &r1 = static_cast<X &&>(x).bitfield; // expected-error 0-1{{C++11}}
64  unsigned const &r2 = static_cast<unsigned &&>(x.bitfield); // expected-error 0-1{{C++11}}
65
66  template<unsigned &r> struct Y {};
67  Y<x.bitfield> y;
68#if __cplusplus <= 201402L
69  // expected-error@-2 {{does not refer to any declaration}} expected-note@-3 {{here}}
70#else
71  // expected-error@-4 {{refers to subobject}}
72#endif
73
74#if __cplusplus >= 201103L
75  const unsigned other = 0;
76  using T = decltype(true ? other : x.bitfield);
77  using T = unsigned;
78#endif
79}
80
81