blob: 6d0695dfa16f1d98c5d1bc40d8647bdc7f108dd7 [file] [log] [blame]
Alexis Hunt61bc1732011-05-01 07:04:31 +00001// RUN: %clang_cc1 -fsyntax-only -std=c++0x -verify %s
2
3struct foo {
4 int i;
5 foo();
6 foo(int);
7 foo(int, int);
8 foo(bool);
9 foo(char);
Alexis Hunt9d47faf2011-05-03 23:05:34 +000010 foo(const float*);
11 foo(const float&);
12 foo(void*);
Alexis Hunt61bc1732011-05-01 07:04:31 +000013};
14
15// Good
16foo::foo (int i) : i(i) {
17}
18// Good
19foo::foo () : foo(-1) {
20}
21// Good
22foo::foo (int, int) : foo() {
23}
24
25foo::foo (bool) : foo(true) { // expected-error{{delegates to itself}}
26}
27
28// Good
Alexis Hunt9d47faf2011-05-03 23:05:34 +000029foo::foo (const float* f) : foo(*f) {
Alexis Hunt61bc1732011-05-01 07:04:31 +000030}
31
32// FIXME: This should error
Alexis Hunt9d47faf2011-05-03 23:05:34 +000033foo::foo (const float &f) : foo(&f) {
Alexis Hunt61bc1732011-05-01 07:04:31 +000034}
35
36foo::foo (char) : i(3), foo(3) { // expected-error{{must appear alone}}
37}
Alexis Hunt9d47faf2011-05-03 23:05:34 +000038
39// This should not cause an infinite loop
40foo::foo (void*) : foo(4.0f) {
41}
42
43struct deleted_dtor {
44 ~deleted_dtor() = delete; // expected-note{{function has been explicitly marked deleted here}}
45 deleted_dtor();
46 deleted_dtor(int) : deleted_dtor() // expected-error{{attempt to use a deleted function}}
47 {}
48};