// PR c++/96204
template<class, class = void>
struct has_type_member {
  static const bool value = false;
};
template<class T>
struct has_type_member<T, typename T::type> {
  static const bool value = true;
};
struct Parent;
struct Child {
private:
  friend struct Parent;
  typedef void type;
};
struct Parent {
  static void f() {
    // The partial specialization does not match despite Child::type
    // being accessible from the current scope.
    extern int x[1];
    extern int x[!has_type_member<Child>::value];
  }
};