brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 1b14068 Raw
57 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s2// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -emit-llvm %s -o - | FileCheck %s3// expected-no-diagnostics4 5namespace PR10856 {6  template<typename T> class C;7 8  template<typename S, typename R = S> C<R> operator - (C<S> m0, C<S> m1);9  template<typename T> class C {10    public:11      template<typename S, typename R> friend C<R> operator - (C<S> m0, C<S> m1);12  };13 14  template<typename S, typename R> inline C<R> operator - (C<S> m0, C<S> m1) {15    C<R> ret;16    return ret;17  }18};19 20int PR10856_main(int argc, char** argv) {21  using namespace PR10856;22  C<int> a;23  a-a;24  return 0;25}26 27// PR10856::C<int> PR10856::operator-<int, int>(PR10856::C<int>, PR10856::C<int>)28// CHECK: define {{.*}} @_ZN7PR10856miIiiEENS_1CIT0_EENS1_IT_EES5_29 30namespace PR10856_Root {31  template<typename Value, typename Defaulted = void>32  bool g(Value value);33 34  template<typename ClassValue> class MyClass {35  private:36    template<typename Value, typename Defaulted>37    friend bool g(Value value);38  };39}40 41namespace PR10856_Root {42  void f() {43    MyClass<int> value;44    g(value);45  }46}47 48// bool PR10856_Root::g<PR10856_Root::MyClass<int>, void>(PR10856_Root::MyClass<int>)49// CHECK: call {{.*}} @_ZN12PR10856_Root1gINS_7MyClassIiEEvEEbT_50 51namespace PR43400 {52  template<typename T> struct X {53    friend void f() = delete;54  };55  X<int> xi;56}57