7919bb2fba
2007-12-10 Paolo Carlini <pcarlini@suse.de> * testsuite/25_algorithms/nth_element/2.cc: Avoid -Wall warnings. * testsuite/27_io/basic_streambuf/sgetc/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_streambuf/sgetc/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/sgetn/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/sgetn/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/sbumpc/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/sbumpc/char/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/snextc/wchar_t/1.cc: Likewise. * testsuite/27_io/basic_stringbuf/snextc/char/1.cc: Likewise. * testsuite/27_io/basic_istream/peek/wchar_t/12296.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/wchar_t/ 28277-2.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/wchar_t/ 28277-3.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/wchar_t/ 28277-4.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/char/ 28277-3.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/char/ 28277-4.cc: Likewise. * testsuite/19_diagnostics/error_code/operators/bool.cc: Likewise. * testsuite/19_diagnostics/error_code/operators/bool_neg.cc: Likewise. * testsuite/18_support/headers/cstddef/macros.cc: Likewise. * testsuite/21_strings/basic_string/inserters_extractors/ wchar_t/28277.cc: Likewise. * testsuite/21_strings/basic_string/inserters_extractors/ char/28277.cc: Likewise. * testsuite/26_numerics/headers/cmath/25913.cc: Likewise. * testsuite/ext/pb_ds/example/priority_queue_xref.cc: Likewise. * testsuite/ext/vstring/inserters_extractors/wchar_t/28277.cc: Likewise. * testsuite/ext/vstring/inserters_extractors/char/28277.cc: Likewise. * testsuite/ext/enc_filebuf/char/13598.cc: Likewise. * testsuite/22_locale/collate/compare/char/2.cc: Likewise. * testsuite/22_locale/time_put/put/wchar_t/5.cc: Likewise. * testsuite/22_locale/time_put/put/char/5.cc: Likewise. * testsuite/22_locale/time_put/put/char/6.cc: Likewise. * testsuite/22_locale/time_put/put/char/7.cc: Likewise. * testsuite/22_locale/time_put/put/char/8.cc: Likewise. * testsuite/22_locale/codecvt/unshift/char/1.cc: Likewise. * testsuite/22_locale/codecvt/length/char/1.cc: Likewise. * testsuite/22_locale/codecvt/length/char/2.cc: Likewise. * testsuite/22_locale/codecvt/in/wchar_t/9.cc: Likewise. * testsuite/22_locale/codecvt/in/char/1.cc: Likewise. * testsuite/22_locale/codecvt/out/char/1.cc: Likewise. * testsuite/22_locale/num_get/get/wchar_t/1.cc: Likewise. * testsuite/22_locale/num_get/get/char/1.cc: Likewise. * testsuite/tr1/5_numerical_facilities/random/uniform_int/ 33128.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/ mutex_weaktoshared.cc: Likewise. * testsuite/tr1/2_general_utilities/shared_ptr/thread/ default_weaktoshared.cc: Likewise. * testsuite/tr1/7_regular_expressions/basic_regex/assign/wchar_t/ range.cc: Likewise. * testsuite/tr1/7_regular_expressions/basic_regex/assign/char/ range.cc: Likewise. * testsuite/tr1/7_regular_expressions/basic_regex/ctors/wchar_t/ range.cc: Likewise. * testsuite/tr1/7_regular_expressions/basic_regex/ctors/char/ range.cc: Likewise. * testsuite/23_containers/multimap/operations/1.cc: Likewise. * testsuite/23_containers/set/operations/1.cc: Likewise. * testsuite/23_containers/vector/bool/capacity/29134.cc: Likewise. * testsuite/23_containers/deque/modifiers/erase/1.cc: Likewise. * testsuite/23_containers/deque/modifiers/erase/2.cc: Likewise. * testsuite/23_containers/multiset/operations/1.cc: Likewise. * testsuite/23_containers/map/operations/1.cc: Likewise. * testsuite/util/testsuite_hooks.cc: Likewise. * testsuite/util/testsuite_rvalref.h: Likewise. 2007-12-10 Jakub Jelinek <jakub@redhat.com> * include/ext/throw_allocator.h (print_to_string): Change sprintf format to %lu and cast ref.second.{first,second} to long. * include/debug/safe_iterator.tcc (_M_can_advance): Add parens to avoid warnings. From-SVN: r130743
198 lines
4.9 KiB
C++
198 lines
4.9 KiB
C++
// -*- C++ -*-
|
|
// Testing utilities for the rvalue reference.
|
|
//
|
|
// Copyright (C) 2005, 2007 Free Software Foundation, Inc.
|
|
//
|
|
// This file is part of the GNU ISO C++ Library. This library is free
|
|
// software; you can redistribute it and/or modify it under the
|
|
// terms of the GNU General Public License as published by the
|
|
// Free Software Foundation; either version 2, or (at your option)
|
|
// any later version.
|
|
//
|
|
// This library is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License along
|
|
// with this library; see the file COPYING. If not, write to the Free
|
|
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
// USA.
|
|
//
|
|
// As a special exception, you may use this file as part of a free software
|
|
// library without restriction. Specifically, if other files instantiate
|
|
// templates or use macros or inline functions from this file, or you compile
|
|
// this file and link it with other files to produce an executable, this
|
|
// file does not by itself cause the resulting executable to be covered by
|
|
// the GNU General Public License. This exception does not however
|
|
// invalidate any other reasons why the executable file might be covered by
|
|
// the GNU General Public License.
|
|
|
|
#ifndef _GLIBCXX_TESTSUITE_RVALREF_H
|
|
#define _GLIBCXX_TESTSUITE_RVALREF_H 1
|
|
|
|
#include <testsuite_hooks.h>
|
|
|
|
namespace __gnu_test
|
|
{
|
|
|
|
// This class is designed to test libstdc++'s template-based rvalue
|
|
// reference support. It should fail at compile-time if there is an attempt
|
|
// to copy it (although see note just below).
|
|
class rvalstruct
|
|
{
|
|
bool
|
|
operator=(const rvalstruct&);
|
|
|
|
// Normally we don't define a copy constructor, as any use of it would
|
|
// show an inefficency. In some cases we know it will be aliased away
|
|
// by the compiler, but it still insists it is defined, so we provide
|
|
// a way of making it public but not giving a body, so any usage would
|
|
// instead fail at link-time.
|
|
#ifdef _GLIBCXX_TESTSUITE_ALLOW_RVALREF_ALIASING
|
|
public:
|
|
rvalstruct(const rvalstruct&);
|
|
#else
|
|
rvalstruct(const rvalstruct&);
|
|
|
|
public:
|
|
#endif
|
|
int val;
|
|
bool valid;
|
|
|
|
rvalstruct() : valid(false)
|
|
{ }
|
|
|
|
rvalstruct(int inval) : val(inval), valid(true)
|
|
{ }
|
|
|
|
rvalstruct&
|
|
operator=(int newval)
|
|
{
|
|
VERIFY(valid == false);
|
|
val = newval;
|
|
valid = true;
|
|
return *this;
|
|
}
|
|
|
|
rvalstruct(rvalstruct&& in)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
val = in.val;
|
|
in.valid = false;
|
|
valid = true;
|
|
}
|
|
|
|
rvalstruct&
|
|
operator=(rvalstruct&& in)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
val = in.val;
|
|
in.valid = false;
|
|
valid = true;
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
bool
|
|
operator==(const rvalstruct& lhs, const rvalstruct& rhs)
|
|
{ return lhs.val == rhs.val; }
|
|
|
|
bool
|
|
operator<(const rvalstruct& lhs, const rvalstruct& rhs)
|
|
{ return lhs.val < rhs.val; }
|
|
|
|
void
|
|
swap(rvalstruct& lhs, rvalstruct& rhs)
|
|
{
|
|
VERIFY(lhs.valid && rhs.valid);
|
|
int temp = lhs.val;
|
|
lhs.val = rhs.val;
|
|
rhs.val = temp;
|
|
}
|
|
|
|
// This is a moveable class which copies how many times it is copied.
|
|
// This is mainly of use in the containers, where the an element inserted
|
|
// into a container has to be copied once to get there, but we want to check
|
|
// nothing else is copied.
|
|
struct copycounter
|
|
{
|
|
static int copycount;
|
|
int val;
|
|
bool valid;
|
|
|
|
copycounter() : val(0), valid(true)
|
|
{ }
|
|
|
|
copycounter(int inval) : val(inval), valid(true)
|
|
{ }
|
|
|
|
copycounter(const copycounter& in) : val(in.val), valid(true)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
++copycount;
|
|
}
|
|
|
|
copycounter(copycounter&& in)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
val = in.val;
|
|
in.valid = false;
|
|
valid = true;
|
|
}
|
|
|
|
copycounter&
|
|
operator=(int newval)
|
|
{
|
|
val = newval;
|
|
valid = true;
|
|
return *this;
|
|
}
|
|
|
|
bool
|
|
operator=(const copycounter& in)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
++copycount;
|
|
val = in.val;
|
|
valid = true;
|
|
return true;
|
|
}
|
|
|
|
copycounter&
|
|
operator=(copycounter&& in)
|
|
{
|
|
VERIFY(in.valid == true);
|
|
val = in.val;
|
|
in.valid = false;
|
|
valid = true;
|
|
return *this;
|
|
}
|
|
|
|
~copycounter()
|
|
{ valid = false; }
|
|
};
|
|
|
|
int copycounter::copycount = 0;
|
|
|
|
bool
|
|
operator==(const copycounter& lhs, const copycounter& rhs)
|
|
{ return lhs.val == rhs.val; }
|
|
|
|
bool
|
|
operator<(const copycounter& lhs, const copycounter& rhs)
|
|
{ return lhs.val < rhs.val; }
|
|
|
|
void
|
|
swap(copycounter& lhs, copycounter& rhs)
|
|
{
|
|
VERIFY(lhs.valid && rhs.valid);
|
|
int temp = lhs.val;
|
|
lhs.val = rhs.val;
|
|
rhs.val = temp;
|
|
}
|
|
|
|
} // namespace __gnu_test
|
|
|
|
#endif // _GLIBCXX_TESTSUITE_TR1_H
|