llvm/clang/test/SemaCXX/complete-member-pointers.cpp

// RUN: %clang_cc1 -verify -fsyntax-only -fcomplete-member-pointers %s

struct S; // expected-note {{forward declaration of 'S'}}
typedef int S::*t;
t foo; // expected-error {{member pointer has incomplete base type 'S'}}

struct S2 {
  int S2::*foo;
};
int S2::*bar;

template <typename T>
struct S3 {
  int T::*foo;
};