// Copyright (C) 2007 Free Software Foundation
// Contributed by Ollie Wild <aaw@google.com>
// { dg-do compile }

// Assorted pointer to data member static cast tests.

struct A { int x; };
struct B : A { int x; };
struct P : A { int x; };
struct V { int x; };
struct D : B, virtual V, private P { int x; };

// Valid static casts.
int B::*p1 = static_cast<int B::*>(&D::x);
int D::*p2 = static_cast<int D::*>(&B::x);

// Virtual base class.
int V::*p3 = static_cast<int V::*>(&D::x);  // { dg-error "" }
int D::*p4 = static_cast<int D::*>(&V::x);  // { dg-error "" }

// Inaccessible base class.
int P::*p5 = static_cast<int P::*>(&D::x);  // { dg-error "" }
int D::*p6 = static_cast<int D::*>(&P::x);  // { dg-error "" }

// Ambiguous base class.
int A::*p7 = static_cast<int A::*>(&D::x);  // { dg-error "" }
int D::*p8 = static_cast<int D::*>(&A::x);  // { dg-error "" }

// Valid conversions which increase cv-qualification.
const int B::*p9 = static_cast<const int B::*>(&D::x);
const int D::*p10 = static_cast<const int D::*>(&B::x);

// Invalid conversions which decrease cv-qualification.
int B::*p11 = static_cast<int B::*>(p10); // { dg-error "casts away constness" }
int D::*p12 = static_cast<int D::*>(p9);  // { dg-error "casts away constness" }

// Attempts to change member type.
float B::*p13 = static_cast<float B::*>(&D::x); // { dg-error "" }
float D::*p14 = static_cast<float D::*>(&B::x); // { dg-error "" }
