]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/cxx0x-defaulted-functions.cpp
Vendor import of clang release_30 branch r142614:
[FreeBSD/FreeBSD.git] / test / SemaCXX / cxx0x-defaulted-functions.cpp
1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
2
3 void fn() = default; // expected-error {{only special member}}
4 struct foo {
5   void fn() = default; // expected-error {{only special member}}
6
7   foo() = default;
8   foo(const foo&) = default;
9   foo(foo&) = default;
10   foo& operator = (const foo&) = default;
11   foo& operator = (foo&) = default;
12   ~foo() = default;
13 };
14
15 struct bar {
16   bar();
17   bar(const bar&);
18   bar(bar&);
19   bar& operator = (const bar&);
20   bar& operator = (bar&);
21   ~bar();
22 };
23
24 bar::bar() = default;
25 bar::bar(const bar&) = default;
26 bar::bar(bar&) = default;
27 bar& bar::operator = (const bar&) = default;
28 bar& bar::operator = (bar&) = default;
29 bar::~bar() = default;
30
31 // FIXME: static_assert(__is_trivial(foo), "foo should be trivial");
32
33 static_assert(!__has_trivial_destructor(bar), "bar's destructor isn't trivial");
34 static_assert(!__has_trivial_constructor(bar),
35               "bar's default constructor isn't trivial");
36 static_assert(!__has_trivial_copy(bar), "bar has no trivial copy");
37 static_assert(!__has_trivial_assign(bar), "bar has no trivial assign");
38
39 void tester() {
40   foo f, g(f);
41   bar b, c(b);
42   f = g;
43   b = c;
44 }
45