// RUN: %clang_cc1 -fsyntax-only -verify %s

namespace test0 {
  char* p = 0; 
  template<class T> T g(T x = &p) { return x; }
  template int g<int>(int);	// OK even though &p isn't an int.
}

// Don't impose access restrictions on explicit instantiations.
namespace test1 {
  class A {
    class Private {};
  public:
    typedef Private Public;
  };

  template <class T> class Temp {
    static Temp<A::Public> make() { return Temp<A::Public>(); }
  };
  template class Temp<A::Private>;

  // FIXME: this ought to be an error, but it isn't because Sema is
  // silently failing to create a declaration for the explicit
  // instantiation.
  template class Temp<A::Private> Temp<int>::make();
}

// Don't impose access restrictions on explicit specializations,
// either.  This goes here because it's an extension of the rule for
// explicit instantiations and doesn't have any independent support.
namespace test2 {
  class A {
    class Private {}; // expected-note {{implicitly declared private here}}
  public:
    typedef Private Public;
  };

  template <class T> class Temp {
    static Temp<A::Public> make();
  };
  template <> class Temp<A::Private> {
  public:
    Temp(int x) {}
  };

  template <> class Temp<A::Private> Temp<int>::make() { // expected-error {{'Private' is a private member of 'test2::A'}}
    return Temp<A::Public>(0);
  }
}
