// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s

struct global {
};

namespace PR10127 {
  struct outer {
    struct middle {
      struct inner {
        int func();
        int i;
      };
      struct inner2 {
      };
      struct inner3 {
      };
      int mfunc();
    };
    typedef int td_int;
  };

  struct str {
    operator decltype(outer::middle::inner()) ();
    operator decltype(outer::middle())::inner2 ();
    operator decltype(outer())::middle::inner3 ();
    str(int (decltype(outer::middle::inner())::*n)(),
             int (decltype(outer::middle())::inner::*o)(),
             int (decltype(outer())::middle::inner::*p)());
  };

  decltype(outer::middle::inner()) a;
  void scope() {
    a.decltype(outer::middle())::mfunc(); // expected-error{{'PR10127::outer::middle::mfunc' is not a member of class 'decltype(outer::middle::inner())'}}
    a.decltype(outer::middle::inner())::func();
    a.decltype(outer::middle())::inner::func();
    a.decltype(outer())::middle::inner::func();

    a.decltype(outer())::middle::inner::~inner();

    decltype(outer())::middle::inner().func();
  }
  decltype(outer::middle())::inner b;
  decltype(outer())::middle::inner c;
  decltype(outer())::fail d; // expected-error{{no type named 'fail' in 'PR10127::outer'}}
  decltype(outer())::fail::inner e; // expected-error{{no member named 'fail' in 'PR10127::outer'}}
  decltype()::fail f; // expected-error{{expected expression}}
  decltype()::middle::fail g; // expected-error{{expected expression}}
  
  decltype(int()) h;
  decltype(int())::PR10127::outer i; // expected-error{{'decltype(int())' (aka 'int') is not a class, namespace, or scoped enumeration}}
  decltype(int())::global j; // expected-error{{'decltype(int())' (aka 'int') is not a class, namespace, or scoped enumeration}}
  
  outer::middle k = decltype(outer())::middle();
  outer::middle::inner l = decltype(outer())::middle::inner();

  template<typename T>
  struct templ {
    typename decltype(T())::middle::inner x; // expected-error{{type 'decltype(int())' (aka 'int') cannot be used prior to '::' because it has no members}}
  };

  template class templ<int>; // expected-note{{in instantiation of template class 'PR10127::templ<int>' requested here}}
  template class templ<outer>;

  enum class foo {
    bar,
    baz
  };
  
  foo m = decltype(foo::bar)::baz;

  enum E {
  };
  struct bar {
    enum E : decltype(outer())::td_int(4);
    enum F : decltype(outer())::td_int;
    enum G : decltype; // expected-error{{expected '(' after 'decltype'}}
  };
}
