18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s
2f769df5eSSebastian Redl 
3f769df5eSSebastian Redl int i = delete; // expected-error {{only functions can have deleted definitions}}
4f769df5eSSebastian Redl 
5f769df5eSSebastian Redl void fn() = delete; // expected-note {{candidate function has been explicitly deleted}}
6f769df5eSSebastian Redl 
7f769df5eSSebastian Redl void fn2(); // expected-note {{previous declaration is here}}
8f769df5eSSebastian Redl void fn2() = delete; // expected-error {{deleted definition must be first declaration}}
9f769df5eSSebastian Redl 
10*4a8ea109SAlexis Hunt void fn3() = delete; // expected-note {{previous definition is here}}
11*4a8ea109SAlexis Hunt void fn3() { // expected-error {{redefinition}}
12f769df5eSSebastian Redl }
13f769df5eSSebastian Redl 
14f769df5eSSebastian Redl void ov(int) {} // expected-note {{candidate function}}
15f769df5eSSebastian Redl void ov(double) = delete; // expected-note {{candidate function has been explicitly deleted}}
16f769df5eSSebastian Redl 
1742e92c4bSSebastian Redl struct WithDel {
1839c778b4SDouglas Gregor   WithDel() = delete; // expected-note {{function has been explicitly marked deleted here}}
1942e92c4bSSebastian Redl   void fn() = delete; // expected-note {{function has been explicitly marked deleted here}}
207827520cSEli Friedman   operator int() = delete; // expected-note {{function has been explicitly marked deleted here}}
2142e92c4bSSebastian Redl   void operator +(int) = delete;
22d1309a3cSSebastian Redl 
23d1309a3cSSebastian Redl   int i = delete; // expected-error {{only functions can have deleted definitions}}
2442e92c4bSSebastian Redl };
2542e92c4bSSebastian Redl 
26f769df5eSSebastian Redl void test() {
27f769df5eSSebastian Redl   fn(); // expected-error {{call to deleted function 'fn'}}
28f769df5eSSebastian Redl   ov(1);
29f769df5eSSebastian Redl   ov(1.0); // expected-error {{call to deleted function 'ov'}}
3042e92c4bSSebastian Redl 
3185f90559SJohn McCall   WithDel dd; // expected-error {{call to deleted constructor of 'WithDel'}}
3242e92c4bSSebastian Redl   WithDel *d = 0;
3342e92c4bSSebastian Redl   d->fn(); // expected-error {{attempt to use a deleted function}}
347827520cSEli Friedman   int i = *d; // expected-error {{invokes a deleted function}}
35f769df5eSSebastian Redl }
36