p7.cpp revision c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5
1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl
3f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl// Straight from the standard
4f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redlstruct B1 {
5c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith  B1(int); // expected-note {{previous constructor}} expected-note {{conflicting constructor}}
6f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl};
7f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redlstruct B2 {
8f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  B2(int); // expected-note {{conflicting constructor}}
9f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl};
10f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redlstruct D1 : B1, B2 {
11f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  using B1::B1; // expected-note {{inherited here}}
12f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  using B2::B2; // expected-error {{already inherited constructor with the same signature}}
13f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl};
14f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redlstruct D2 : B1, B2 {
15f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  using B1::B1;
16f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  using B2::B2;
17f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl  D2(int);
18f677ea3cc9598d9952ad7ffab5fb322ba4c5be31Sebastian Redl};
19c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith
20c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smithtemplate<typename T> struct B3 {
21c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith  B3(T); // expected-note {{previous constructor}}
22c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith};
23c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smithtemplate<typename T> struct B4 : B3<T>, B1 {
24c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith  B4();
25c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith  using B3<T>::B3; // expected-note {{inherited here}}
26c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith  using B1::B1; // expected-error {{already inherited}}
27c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard Smith};
28c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard SmithB4<char> b4c;
29c5a89a1cc2f168ad0a115c560b8de5f1c952d8c5Richard SmithB4<int> b4i; // expected-note {{here}}
30