not_special.c

来自「用于进行gcc测试」· C语言 代码 · 共 55 行

C
55
字号
// I, Howard Hinnant, hereby place this code in the public domain.// Test that move constructor and move assignement are not special.//   That is, their presence should not inhibit compiler generated//   copy ctor or assignment.  Rather they should overload with the//   compiler generated special members.// { dg-do run }// { dg-options "-std=c++0x" }#include <assert.h>template <bool> struct sa;template <> struct sa<true> {};struct one   {char x[1];};struct two   {char x[2];};int copy = 0;int assign = 0;struct base{    base() {}    base(const base&) {++copy;}    base& operator=(const base&) {++assign; return *this;}};struct derived    : base{    derived() {}    derived(derived&&) {}    derived& operator=(derived&&) {return *this;}};int test1(){    derived d;    derived d2(static_cast<derived&&>(d));  // should not call base::(const base&)    assert(copy == 0);    derived d3(d);                          // should     call base::(const base&)    assert(copy == 1);    d2 = static_cast<derived&&>(d);         // should not call base::operator=    assert(assign == 0);    d3 = d;                                 // should     call base::operator=    assert(assign == 1);    return 0;}int main(){    return test1();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?