1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass A {
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaopublic:
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  int& i;
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  A(int& i) : i(i) { }
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  static int s;
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T> void ft(T& t) {
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  t.*&T::i = 10; // expected-error{{cannot form a pointer-to-member to member 'i' of reference type 'int &'}}
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid f() {
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  int b;
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  A a(b);
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  int A::*ip = &A::s; // expected-error {{cannot initialize a variable of type 'int A::*' with an rvalue of type 'int *'}}
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  a.*&A::s = 10; // expected-error{{right hand operand to .* has non-pointer-to-member type 'int *'}}
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  a.*&A::i = 10; // expected-error{{cannot form a pointer-to-member to member 'i' of reference type 'int &'}}
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  ft(a); // expected-note{{in instantiation of function template specialization 'ft<A>' requested here}}
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  void A::*p = 0; // expected-error{{'p' declared as a member pointer to void}}
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
27