16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -std=c++11 -verify %s -Wunused-parameter
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// PR19303 : Make sure we don't get a unused expression warning for deleted and
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// defaulted functions
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// expected-no-diagnostics
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass A {
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinespublic:
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  int x;
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  A() = default;
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  ~A() = default;
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  A(const A &other) = delete;
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  template <typename T>
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  void SetX(T x) {
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines    this->x = x;
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  };
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  void SetX1(int x);
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate <>
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid A::SetX(A x) = delete;
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass B {
276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinespublic:
286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  B() = default;
296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  ~B() = default;
306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines  B(const B &other);
316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines};
326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesB::B(const B &other) = default;
34