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

namespace PR15360 {
  template<typename R, typename U, R F>
  U f() { return &F; } // expected-error{{cannot take the address of an rvalue of type 'int (*)(int)'}} expected-error{{cannot take the address of an rvalue of type 'int *'}}
  void test() {
    f<int(int), int(*)(int), nullptr>(); // expected-note{{in instantiation of}}
    f<int[3], int*, nullptr>(); // expected-note{{in instantiation of}}
  }
}

namespace CanonicalNullptr {
  template<typename T> struct get { typedef T type; };
  struct X {};
  template<typename T, typename get<T *>::type P = nullptr> struct A {};
  template<typename T, typename get<decltype((T(), nullptr))>::type P = nullptr> struct B {};
  template<typename T, typename get<T X::*>::type P = nullptr> struct C {};

  template<typename T> A<T> MakeA();
  template<typename T> B<T> MakeB();
  template<typename T> C<T> MakeC();
  A<int> a = MakeA<int>();
  B<int> b = MakeB<int>();
  C<int> c = MakeC<int>();
}

namespace Auto {
  template<auto> struct A { };  // expected-error {{until C++17}}
}

namespace check_conversion_early {
  struct X {};
  template<int> struct A {};
  template<X &x> struct A<x> {}; // expected-error {{not implicitly convertible}}

  struct Y { constexpr operator int() const { return 0; } };
  template<Y &y> struct A<y> {}; // expected-error {{cannot be deduced}} expected-note {{'y'}}
}

namespace ReportCorrectParam {
template <int a, unsigned b, int c>
void TempFunc() {}

void Useage() {
  //expected-error@+2 {{no matching function}}
  //expected-note@-4 {{candidate template ignored: invalid explicitly-specified argument for template parameter 'b'}}
  TempFunc<1, -1, 1>();
}
}

namespace PR42513 {
  template<typename X, int Ret = WidgetCtor((X*)nullptr)> void f();
  constexpr int WidgetCtor(struct X1*);

  struct X1 {
    friend constexpr int WidgetCtor(X1*);
  };
  template<typename X1>
  struct StandardWidget {
    friend constexpr int WidgetCtor(X1*) {
      return 0;
    }
  };
  template struct StandardWidget<X1>;

  void use() { f<X1>(); }
}
