// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
// RUN: %clang_cc1 -S -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s
// expected-no-diagnostics

namespace PR10856 {
  template<typename T> class C;

  template<typename S, typename R = S> C<R> operator - (C<S> m0, C<S> m1);
  template<typename T> class C {
    public:
      template<typename S, typename R> friend C<R> operator - (C<S> m0, C<S> m1);
  };

  template<typename S, typename R> inline C<R> operator - (C<S> m0, C<S> m1) {
    C<R> ret;
    return ret;
  }
};

int PR10856_main(int argc, char** argv) {
  using namespace PR10856;
  C<int> a;
  a-a;
  return 0;
}

// PR10856::C<int> PR10856::operator-<int, int>(PR10856::C<int>, PR10856::C<int>)
// CHECK: define {{.*}} @_ZN7PR10856miIiiEENS_1CIT0_EENS1_IT_EES5_

namespace PR10856_Root {
  template<typename Value, typename Defaulted = void>
  bool g(Value value);

  template<typename ClassValue> class MyClass {
  private:
    template<typename Value, typename Defaulted>
    friend bool g(Value value);
  };
}

namespace PR10856_Root {
  void f() {
    MyClass<int> value;
    g(value);
  }
}

// bool PR10856_Root::g<PR10856_Root::MyClass<int>, void>(PR10856_Root::MyClass<int>)
// CHECK: call {{.*}} @_ZN12PR10856_Root1gINS_7MyClassIiEEvEEbT_
