1 | // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s |
2 | |
3 | struct foo { |
4 | int i; |
5 | foo(); |
6 | foo(int); |
7 | foo(int, int); |
8 | foo(bool); |
9 | foo(char); |
10 | foo(const float*); |
11 | foo(const float&); |
12 | foo(void*); |
13 | }; |
14 | |
15 | // Good |
16 | foo::foo (int i) : i(i) { |
17 | } |
18 | // Good |
19 | foo::foo () : foo(-1) { |
20 | } |
21 | // Good |
22 | foo::foo (int, int) : foo() { |
23 | } |
24 | |
25 | foo::foo (bool) : foo(true) { // expected-error{{creates a delegation cycle}} |
26 | } |
27 | |
28 | // Good |
29 | foo::foo (const float* f) : foo(*f) { // expected-note{{it delegates to}} |
30 | } |
31 | |
32 | foo::foo (const float &f) : foo(&f) { //expected-error{{creates a delegation cycle}} \ |
33 | //expected-note{{which delegates to}} |
34 | } |
35 | |
36 | foo::foo (char) : |
37 | i(3), |
38 | foo(3) { // expected-error{{must appear alone}} |
39 | } |
40 | |
41 | // This should not cause an infinite loop |
42 | foo::foo (void*) : foo(4.0f) { |
43 | } |
44 | |
45 | struct deleted_dtor { |
46 | ~deleted_dtor() = delete; // expected-note{{'~deleted_dtor' has been explicitly marked deleted here}} |
47 | deleted_dtor(); |
48 | deleted_dtor(int) : deleted_dtor() // expected-error{{attempt to use a deleted function}} |
49 | {} |
50 | }; |
51 | |