mirror of
https://github.com/boostorg/core.git
synced 2025-11-29 05:40:14 +01:00
Remove files left behind by the merge.
This commit is contained in:
@@ -1,76 +0,0 @@
|
|||||||
#include <boost/config.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC)
|
|
||||||
#pragma warning(disable: 4786) // identifier truncated in debug info
|
|
||||||
#pragma warning(disable: 4710) // function not inlined
|
|
||||||
#pragma warning(disable: 4711) // function selected for automatic inline expansion
|
|
||||||
#pragma warning(disable: 4514) // unreferenced inline removed
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// addressof_fn_test.cpp: addressof( f )
|
|
||||||
//
|
|
||||||
// Copyright (c) 2008, 2009 Peter Dimov
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt
|
|
||||||
|
|
||||||
#include <boost/utility/addressof.hpp>
|
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
void f0()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f1(int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f2(int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f3(int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f4(int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f5(int, int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f6(int, int, int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f7(int, int, int, int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f8(int, int, int, int, int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void f9(int, int, int, int, int, int, int, int, int)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
BOOST_TEST( boost::addressof( f0 ) == &f0 );
|
|
||||||
BOOST_TEST( boost::addressof( f1 ) == &f1 );
|
|
||||||
BOOST_TEST( boost::addressof( f2 ) == &f2 );
|
|
||||||
BOOST_TEST( boost::addressof( f3 ) == &f3 );
|
|
||||||
BOOST_TEST( boost::addressof( f4 ) == &f4 );
|
|
||||||
BOOST_TEST( boost::addressof( f5 ) == &f5 );
|
|
||||||
BOOST_TEST( boost::addressof( f6 ) == &f6 );
|
|
||||||
BOOST_TEST( boost::addressof( f7 ) == &f7 );
|
|
||||||
BOOST_TEST( boost::addressof( f8 ) == &f8 );
|
|
||||||
BOOST_TEST( boost::addressof( f9 ) == &f9 );
|
|
||||||
|
|
||||||
return boost::report_errors();
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
//
|
|
||||||
// Copyright 2013 Peter Dimov
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <boost/utility/addressof.hpp>
|
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
|
||||||
#include <cstddef>
|
|
||||||
|
|
||||||
#if defined( BOOST_NO_CXX11_NULLPTR )
|
|
||||||
|
|
||||||
void nullptr_test()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void nullptr_test()
|
|
||||||
{
|
|
||||||
{
|
|
||||||
auto x = nullptr;
|
|
||||||
BOOST_TEST( boost::addressof(x) == &x );
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto const x = nullptr;
|
|
||||||
BOOST_TEST( boost::addressof(x) == &x );
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto volatile x = nullptr;
|
|
||||||
BOOST_TEST( boost::addressof(x) == &x );
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
auto const volatile x = nullptr;
|
|
||||||
BOOST_TEST( boost::addressof(x) == &x );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
nullptr_test();
|
|
||||||
return boost::report_errors();
|
|
||||||
}
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
// Copyright (C) 2002 Brad King (brad.king@kitware.com)
|
|
||||||
// Douglas Gregor (gregod@cs.rpi.edu)
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// For more information, see http://www.boost.org
|
|
||||||
|
|
||||||
|
|
||||||
#include <boost/utility/addressof.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
#pragma warning(push, 3)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
#pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
|
||||||
|
|
||||||
template<class T> void scalar_test( T * = 0 )
|
|
||||||
{
|
|
||||||
T* px = new T();
|
|
||||||
|
|
||||||
T& x = *px;
|
|
||||||
BOOST_TEST( boost::addressof(x) == px );
|
|
||||||
|
|
||||||
const T& cx = *px;
|
|
||||||
const T* pcx = boost::addressof(cx);
|
|
||||||
BOOST_TEST( pcx == px );
|
|
||||||
|
|
||||||
volatile T& vx = *px;
|
|
||||||
volatile T* pvx = boost::addressof(vx);
|
|
||||||
BOOST_TEST( pvx == px );
|
|
||||||
|
|
||||||
const volatile T& cvx = *px;
|
|
||||||
const volatile T* pcvx = boost::addressof(cvx);
|
|
||||||
BOOST_TEST( pcvx == px );
|
|
||||||
|
|
||||||
delete px;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T> void array_test( T * = 0 )
|
|
||||||
{
|
|
||||||
T nrg[3] = {1,2,3};
|
|
||||||
T (*pnrg)[3] = &nrg;
|
|
||||||
BOOST_TEST( boost::addressof(nrg) == pnrg );
|
|
||||||
|
|
||||||
T const cnrg[3] = {1,2,3};
|
|
||||||
T const (*pcnrg)[3] = &cnrg;
|
|
||||||
BOOST_TEST( boost::addressof(cnrg) == pcnrg );
|
|
||||||
}
|
|
||||||
|
|
||||||
struct addressable
|
|
||||||
{
|
|
||||||
addressable( int = 0 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct useless_type {};
|
|
||||||
|
|
||||||
class nonaddressable {
|
|
||||||
public:
|
|
||||||
|
|
||||||
nonaddressable( int = 0 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void dummy(); // Silence GCC warning: all member of class are private
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
useless_type operator&() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
scalar_test<char>();
|
|
||||||
scalar_test<int>();
|
|
||||||
scalar_test<addressable>();
|
|
||||||
scalar_test<nonaddressable>();
|
|
||||||
|
|
||||||
array_test<char>();
|
|
||||||
array_test<int>();
|
|
||||||
array_test<addressable>();
|
|
||||||
array_test<nonaddressable>();
|
|
||||||
|
|
||||||
return boost::report_errors();
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
// Copyright (C) 2002 Brad King (brad.king@kitware.com)
|
|
||||||
// Douglas Gregor (gregod@cs.rpi.edu)
|
|
||||||
//
|
|
||||||
// Copyright 2009 Peter Dimov
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See
|
|
||||||
// accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// For more information, see http://www.boost.org
|
|
||||||
|
|
||||||
|
|
||||||
#include <boost/utility/addressof.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
#pragma warning(push, 3)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
#pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <boost/detail/lightweight_test.hpp>
|
|
||||||
|
|
||||||
template<class T> void scalar_test( T * = 0 )
|
|
||||||
{
|
|
||||||
T* px = new T();
|
|
||||||
|
|
||||||
T& x = *px;
|
|
||||||
BOOST_TEST( boost::addressof(x) == px );
|
|
||||||
|
|
||||||
const T& cx = *px;
|
|
||||||
const T* pcx = boost::addressof(cx);
|
|
||||||
BOOST_TEST( pcx == px );
|
|
||||||
|
|
||||||
volatile T& vx = *px;
|
|
||||||
volatile T* pvx = boost::addressof(vx);
|
|
||||||
BOOST_TEST( pvx == px );
|
|
||||||
|
|
||||||
const volatile T& cvx = *px;
|
|
||||||
const volatile T* pcvx = boost::addressof(cvx);
|
|
||||||
BOOST_TEST( pcvx == px );
|
|
||||||
|
|
||||||
delete px;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T> void array_test( T * = 0 )
|
|
||||||
{
|
|
||||||
T nrg[3] = {1,2,3};
|
|
||||||
T (*pnrg)[3] = &nrg;
|
|
||||||
BOOST_TEST( boost::addressof(nrg) == pnrg );
|
|
||||||
|
|
||||||
T const cnrg[3] = {1,2,3};
|
|
||||||
T const (*pcnrg)[3] = &cnrg;
|
|
||||||
BOOST_TEST( boost::addressof(cnrg) == pcnrg );
|
|
||||||
}
|
|
||||||
|
|
||||||
class convertible {
|
|
||||||
public:
|
|
||||||
|
|
||||||
convertible( int = 0 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class U> operator U () const
|
|
||||||
{
|
|
||||||
return U();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class convertible2 {
|
|
||||||
public:
|
|
||||||
|
|
||||||
convertible2( int = 0 )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
operator convertible2* () const
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
scalar_test<convertible>();
|
|
||||||
scalar_test<convertible2>();
|
|
||||||
|
|
||||||
array_test<convertible>();
|
|
||||||
array_test<convertible2>();
|
|
||||||
|
|
||||||
return boost::report_errors();
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
// Boost checked_delete test program ---------------------------------------//
|
|
||||||
|
|
||||||
// Copyright Beman Dawes 2001. Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// See http://www.boost.org/libs/utility for documentation.
|
|
||||||
|
|
||||||
// Revision History
|
|
||||||
// 21 May 01 Initial version (Beman Dawes)
|
|
||||||
|
|
||||||
#include <boost/checked_delete.hpp> // for checked_delete
|
|
||||||
|
|
||||||
// This program demonstrates compiler errors when trying to delete an
|
|
||||||
// incomplete type.
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
class Incomplete;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
Incomplete * p = 0;
|
|
||||||
boost::checked_delete(p); // should cause compile time error
|
|
||||||
boost::checked_array_delete(p); // should cause compile time error
|
|
||||||
return 0;
|
|
||||||
} // main
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# Copyright David Abrahams 2003.
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
# For more information, see http://www.boost.org/
|
|
||||||
|
|
||||||
project
|
|
||||||
: requirements <library>/boost/test//boost_test_exec_monitor
|
|
||||||
;
|
|
||||||
|
|
||||||
test-suite utility/enable_if
|
|
||||||
:
|
|
||||||
[ run constructors.cpp ]
|
|
||||||
[ run dummy_arg_disambiguation.cpp ]
|
|
||||||
[ run lazy.cpp ]
|
|
||||||
[ run lazy_test.cpp ]
|
|
||||||
[ run member_templates.cpp ]
|
|
||||||
[ run namespace_disambiguation.cpp ]
|
|
||||||
[ run no_disambiguation.cpp ]
|
|
||||||
[ run partial_specializations.cpp ]
|
|
||||||
;
|
|
||||||
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::disable_if;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
struct container {
|
|
||||||
bool my_value;
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
container(const T&, const typename enable_if<is_arithmetic<T>, T>::type * = 0):
|
|
||||||
my_value(true) {}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
container(const T&, const typename disable_if<is_arithmetic<T>, T>::type * = 0):
|
|
||||||
my_value(false) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
// example from Howard Hinnant (tests enable_if template members of a templated class)
|
|
||||||
template <class charT>
|
|
||||||
struct xstring
|
|
||||||
{
|
|
||||||
template <class It>
|
|
||||||
xstring(It begin, It end, typename
|
|
||||||
disable_if<is_arithmetic<It> >::type* = 0)
|
|
||||||
: data(end-begin) {}
|
|
||||||
|
|
||||||
int data;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CHECK(container(1).my_value);
|
|
||||||
BOOST_CHECK(container(1.0).my_value);
|
|
||||||
|
|
||||||
BOOST_CHECK(!container("1").my_value);
|
|
||||||
BOOST_CHECK(!container(static_cast<void*>(0)).my_value);
|
|
||||||
|
|
||||||
char sa[] = "123456";
|
|
||||||
BOOST_CHECK(xstring<char>(sa, sa+6).data == 6);
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_arithmetic.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::disable_if;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
template <int N> struct dummy {
|
|
||||||
dummy(int) {};
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename enable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(T t, dummy<0> = 0) { return true; }
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename disable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(T t, dummy<1> = 0) { return false; }
|
|
||||||
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CHECK(arithmetic_object(1));
|
|
||||||
BOOST_CHECK(arithmetic_object(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!arithmetic_object("1"));
|
|
||||||
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_same.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if_c;
|
|
||||||
using boost::lazy_enable_if_c;
|
|
||||||
|
|
||||||
// This class provides a reduced example of a traits class for
|
|
||||||
// computing the result of multiplying two types. The member typedef
|
|
||||||
// 'type' in this traits class defines the return type of this
|
|
||||||
// operator. The return type member is invalid unless both arguments
|
|
||||||
// for mult_traits are values that mult_traits expects (ints in this
|
|
||||||
// case). This kind of situation may arise if a traits class only
|
|
||||||
// makes sense for some set of types, not all C++ types.
|
|
||||||
|
|
||||||
template <class T> struct is_int {
|
|
||||||
BOOST_STATIC_CONSTANT(bool, value = (boost::is_same<T, int>::value));
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T, class U>
|
|
||||||
struct mult_traits {
|
|
||||||
typedef typename T::does_not_exist type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct mult_traits<int, int> {
|
|
||||||
typedef int type;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Next, a forwarding function mult() is defined. It is enabled only
|
|
||||||
// when both arguments are of type int. The first version, using
|
|
||||||
// non-lazy enable_if_c does not work.
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
template <class T, class U>
|
|
||||||
typename enable_if_c<
|
|
||||||
is_int<T>::value && is_int<U>::value,
|
|
||||||
typename mult_traits<T, U>::type
|
|
||||||
>::type
|
|
||||||
mult(const T& x, const U& y) {return x * y;}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// A correct version uses lazy_enable_if_c.
|
|
||||||
// This template removes compiler errors from invalid code used as an
|
|
||||||
// argument to enable_if_c.
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
template <class T, class U>
|
|
||||||
typename lazy_enable_if_c<
|
|
||||||
is_int<T>::value & is_int<U>::value,
|
|
||||||
mult_traits<T, U>
|
|
||||||
>::type
|
|
||||||
mult(const T& x, const U& y) {return x * y;}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
double mult(int i, double d) { return (double)i * d; }
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
BOOST_CHECK(mult(1, 2) == 2);
|
|
||||||
|
|
||||||
BOOST_CHECK(mult(1, 3.0) == 3.0);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
// Testing all variations of lazy_enable_if.
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/mpl/not.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_same.hpp>
|
|
||||||
|
|
||||||
using boost::lazy_enable_if;
|
|
||||||
using boost::lazy_disable_if;
|
|
||||||
|
|
||||||
using boost::lazy_enable_if_c;
|
|
||||||
using boost::lazy_disable_if_c;
|
|
||||||
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct is_int_or_double {
|
|
||||||
BOOST_STATIC_CONSTANT(bool,
|
|
||||||
value = (boost::is_same<T, int>::value ||
|
|
||||||
boost::is_same<T, double>::value));
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct some_traits {
|
|
||||||
typedef typename T::does_not_exist type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct some_traits<int> {
|
|
||||||
typedef bool type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct some_traits<double> {
|
|
||||||
typedef bool type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct make_bool {
|
|
||||||
typedef bool type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct make_bool<int> {};
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct make_bool<double> {};
|
|
||||||
|
|
||||||
namespace A {
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename lazy_enable_if<is_int_or_double<T>, some_traits<T> >::type
|
|
||||||
foo(T t) { return true; }
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename lazy_enable_if_c<is_int_or_double<T>::value, some_traits<T> >::type
|
|
||||||
foo2(T t) { return true; }
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace B {
|
|
||||||
template<class T>
|
|
||||||
typename lazy_disable_if<is_int_or_double<T>, make_bool<T> >::type
|
|
||||||
foo(T t) { return false; }
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename lazy_disable_if_c<is_int_or_double<T>::value, make_bool<T> >::type
|
|
||||||
foo2(T t) { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
using namespace A;
|
|
||||||
using namespace B;
|
|
||||||
BOOST_CHECK(foo(1));
|
|
||||||
BOOST_CHECK(foo(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!foo("1"));
|
|
||||||
BOOST_CHECK(!foo(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
BOOST_CHECK(foo2(1));
|
|
||||||
BOOST_CHECK(foo2(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!foo2("1"));
|
|
||||||
BOOST_CHECK(!foo2(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_arithmetic.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::disable_if;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
struct container {
|
|
||||||
template <class T>
|
|
||||||
typename enable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(const T&, const int* /* disambiguate */ = 0) {return true;}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
typename disable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(const T&) {return false;}
|
|
||||||
};
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CHECK(container().arithmetic_object(1));
|
|
||||||
BOOST_CHECK(container().arithmetic_object(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!container().arithmetic_object("1"));
|
|
||||||
BOOST_CHECK(!container().arithmetic_object(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/mpl/not.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_arithmetic.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::mpl::not_;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
namespace A {
|
|
||||||
template<class T>
|
|
||||||
typename enable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(T t) { return true; }
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace B {
|
|
||||||
template<class T>
|
|
||||||
typename enable_if<not_<is_arithmetic<T> >, bool>::type
|
|
||||||
arithmetic_object(T t) { return false; }
|
|
||||||
}
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
using namespace A;
|
|
||||||
using namespace B;
|
|
||||||
BOOST_CHECK(arithmetic_object(1));
|
|
||||||
BOOST_CHECK(arithmetic_object(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!arithmetic_object("1"));
|
|
||||||
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
#include <boost/mpl/not.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_arithmetic.hpp>
|
|
||||||
|
|
||||||
using boost::mpl::not_;
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename enable_if<is_arithmetic<T>, bool>::type
|
|
||||||
arithmetic_object(T t) { return true; }
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename enable_if<not_<is_arithmetic<T> >, bool>::type
|
|
||||||
arithmetic_object(T t) { return false; }
|
|
||||||
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CHECK(arithmetic_object(1));
|
|
||||||
BOOST_CHECK(arithmetic_object(1.0));
|
|
||||||
|
|
||||||
BOOST_CHECK(!arithmetic_object("1"));
|
|
||||||
BOOST_CHECK(!arithmetic_object(static_cast<void*>(0)));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
// Boost enable_if library
|
|
||||||
|
|
||||||
// Copyright 2003 (c) The Trustees of Indiana University.
|
|
||||||
|
|
||||||
// Use, modification, and distribution is subject to the Boost Software
|
|
||||||
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// Authors: Jaakko Jarvi (jajarvi at osl.iu.edu)
|
|
||||||
// Jeremiah Willcock (jewillco at osl.iu.edu)
|
|
||||||
// Andrew Lumsdaine (lums at osl.iu.edu)
|
|
||||||
|
|
||||||
#include <boost/test/minimal.hpp>
|
|
||||||
|
|
||||||
#include <boost/utility/enable_if.hpp>
|
|
||||||
#include <boost/type_traits/is_arithmetic.hpp>
|
|
||||||
|
|
||||||
using boost::enable_if_c;
|
|
||||||
using boost::disable_if_c;
|
|
||||||
using boost::enable_if;
|
|
||||||
using boost::disable_if;
|
|
||||||
using boost::is_arithmetic;
|
|
||||||
|
|
||||||
template <class T, class Enable = void>
|
|
||||||
struct tester;
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct tester<T, typename enable_if_c<is_arithmetic<T>::value>::type> {
|
|
||||||
BOOST_STATIC_CONSTANT(bool, value = true);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct tester<T, typename disable_if_c<is_arithmetic<T>::value>::type> {
|
|
||||||
BOOST_STATIC_CONSTANT(bool, value = false);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T, class Enable = void>
|
|
||||||
struct tester2;
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct tester2<T, typename enable_if<is_arithmetic<T> >::type> {
|
|
||||||
BOOST_STATIC_CONSTANT(bool, value = true);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct tester2<T, typename disable_if<is_arithmetic<T> >::type> {
|
|
||||||
BOOST_STATIC_CONSTANT(bool, value = false);
|
|
||||||
};
|
|
||||||
|
|
||||||
int test_main(int, char*[])
|
|
||||||
{
|
|
||||||
|
|
||||||
BOOST_CHECK(tester<int>::value);
|
|
||||||
BOOST_CHECK(tester<double>::value);
|
|
||||||
|
|
||||||
BOOST_CHECK(!tester<char*>::value);
|
|
||||||
BOOST_CHECK(!tester<void*>::value);
|
|
||||||
|
|
||||||
BOOST_CHECK(tester2<int>::value);
|
|
||||||
BOOST_CHECK(tester2<double>::value);
|
|
||||||
|
|
||||||
BOOST_CHECK(!tester2<char*>::value);
|
|
||||||
BOOST_CHECK(!tester2<void*>::value);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
134
ref_ct_test.cpp
134
ref_ct_test.cpp
@@ -1,134 +0,0 @@
|
|||||||
// Copyright David Abrahams and Aleksey Gurtovoy
|
|
||||||
// 2002-2004. Distributed under the Boost Software License, Version
|
|
||||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// compile-time test for "boost/ref.hpp" header content
|
|
||||||
// see 'ref_test.cpp' for run-time part
|
|
||||||
|
|
||||||
#include <boost/ref.hpp>
|
|
||||||
#include <boost/type_traits/is_same.hpp>
|
|
||||||
#include <boost/type_traits/remove_const.hpp>
|
|
||||||
#include <boost/static_assert.hpp>
|
|
||||||
#include <boost/detail/workaround.hpp>
|
|
||||||
|
|
||||||
#include <boost/mpl/assert.hpp>
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
template< typename T, typename U >
|
|
||||||
void ref_test(boost::reference_wrapper<U>)
|
|
||||||
{
|
|
||||||
typedef typename boost::reference_wrapper<U>::type type;
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<U,type>::value));
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<T,type>::value));
|
|
||||||
}
|
|
||||||
|
|
||||||
template< typename T >
|
|
||||||
void assignable_test(T x)
|
|
||||||
{
|
|
||||||
x = x;
|
|
||||||
}
|
|
||||||
|
|
||||||
template< bool R, typename T >
|
|
||||||
void is_reference_wrapper_test(T)
|
|
||||||
{
|
|
||||||
BOOST_STATIC_ASSERT(boost::is_reference_wrapper<T>::value == R);
|
|
||||||
}
|
|
||||||
|
|
||||||
template< typename R, typename Ref >
|
|
||||||
void cxx_reference_test(Ref)
|
|
||||||
{
|
|
||||||
#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
|
|
||||||
typedef typename boost::remove_const<Ref>::type ref;
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<R,ref>::value));
|
|
||||||
#else
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<R,Ref>::value));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
template< typename R, typename Ref >
|
|
||||||
void unwrap_reference_test(Ref)
|
|
||||||
{
|
|
||||||
#if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
|
|
||||||
typedef typename boost::remove_const<Ref>::type ref;
|
|
||||||
typedef typename boost::unwrap_reference<ref>::type type;
|
|
||||||
#else
|
|
||||||
typedef typename boost::unwrap_reference<Ref>::type type;
|
|
||||||
#endif
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<R,type>::value));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
int& ri = i;
|
|
||||||
|
|
||||||
int const ci = 0;
|
|
||||||
int const& rci = ci;
|
|
||||||
|
|
||||||
// 'ref/cref' functions test
|
|
||||||
ref_test<int>(boost::ref(i));
|
|
||||||
ref_test<int>(boost::ref(ri));
|
|
||||||
ref_test<int const>(boost::ref(ci));
|
|
||||||
ref_test<int const>(boost::ref(rci));
|
|
||||||
|
|
||||||
ref_test<int const>(boost::cref(i));
|
|
||||||
ref_test<int const>(boost::cref(ri));
|
|
||||||
ref_test<int const>(boost::cref(ci));
|
|
||||||
ref_test<int const>(boost::cref(rci));
|
|
||||||
|
|
||||||
// test 'assignable' requirement
|
|
||||||
assignable_test(boost::ref(i));
|
|
||||||
assignable_test(boost::ref(ri));
|
|
||||||
assignable_test(boost::cref(i));
|
|
||||||
assignable_test(boost::cref(ci));
|
|
||||||
assignable_test(boost::cref(rci));
|
|
||||||
|
|
||||||
// 'is_reference_wrapper' test
|
|
||||||
is_reference_wrapper_test<true>(boost::ref(i));
|
|
||||||
is_reference_wrapper_test<true>(boost::ref(ri));
|
|
||||||
is_reference_wrapper_test<true>(boost::cref(i));
|
|
||||||
is_reference_wrapper_test<true>(boost::cref(ci));
|
|
||||||
is_reference_wrapper_test<true>(boost::cref(rci));
|
|
||||||
|
|
||||||
is_reference_wrapper_test<false>(i);
|
|
||||||
is_reference_wrapper_test<false, int&>(ri);
|
|
||||||
is_reference_wrapper_test<false>(ci);
|
|
||||||
is_reference_wrapper_test<false, int const&>(rci);
|
|
||||||
|
|
||||||
// ordinary references/function template arguments deduction test
|
|
||||||
cxx_reference_test<int>(i);
|
|
||||||
cxx_reference_test<int>(ri);
|
|
||||||
cxx_reference_test<int>(ci);
|
|
||||||
cxx_reference_test<int>(rci);
|
|
||||||
|
|
||||||
cxx_reference_test<int&, int&>(i);
|
|
||||||
cxx_reference_test<int&, int&>(ri);
|
|
||||||
cxx_reference_test<int const&, int const&>(i);
|
|
||||||
cxx_reference_test<int const&, int const&>(ri);
|
|
||||||
cxx_reference_test<int const&, int const&>(ci);
|
|
||||||
cxx_reference_test<int const&, int const&>(rci);
|
|
||||||
|
|
||||||
// 'unwrap_reference' test
|
|
||||||
unwrap_reference_test<int>(boost::ref(i));
|
|
||||||
unwrap_reference_test<int>(boost::ref(ri));
|
|
||||||
unwrap_reference_test<int const>(boost::cref(i));
|
|
||||||
unwrap_reference_test<int const>(boost::cref(ci));
|
|
||||||
unwrap_reference_test<int const>(boost::cref(rci));
|
|
||||||
|
|
||||||
unwrap_reference_test<int>(i);
|
|
||||||
unwrap_reference_test<int>(ri);
|
|
||||||
unwrap_reference_test<int>(ci);
|
|
||||||
unwrap_reference_test<int>(rci);
|
|
||||||
unwrap_reference_test<int&, int&>(i);
|
|
||||||
unwrap_reference_test<int&, int&>(ri);
|
|
||||||
unwrap_reference_test<int const&, int const&>(i);
|
|
||||||
unwrap_reference_test<int const&, int const&>(ri);
|
|
||||||
unwrap_reference_test<int const&, int const&>(ci);
|
|
||||||
unwrap_reference_test<int const&, int const&>(rci);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
121
ref_test.cpp
121
ref_test.cpp
@@ -1,121 +0,0 @@
|
|||||||
// Copyright David Abrahams and Aleksey Gurtovoy
|
|
||||||
// 2002-2004. Distributed under the Boost Software License, Version
|
|
||||||
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
// http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// run-time test for "boost/ref.hpp" header content
|
|
||||||
// see 'ref_ct_test.cpp' for compile-time part
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__ICL)
|
|
||||||
# pragma warning(disable: 4786) // identifier truncated in debug info
|
|
||||||
# pragma warning(disable: 4710) // function not inlined
|
|
||||||
# pragma warning(disable: 4711) // function selected for automatic inline expansion
|
|
||||||
# pragma warning(disable: 4514) // unreferenced inline removed
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <boost/ref.hpp>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
# pragma warning(push, 3)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
|
|
||||||
# pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define BOOST_INCLUDE_MAIN
|
|
||||||
#include <boost/test/test_tools.hpp>
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
using namespace boost;
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
struct ref_wrapper
|
|
||||||
{
|
|
||||||
// Used to verify implicit conversion
|
|
||||||
static T* get_pointer(T& x)
|
|
||||||
{
|
|
||||||
return &x;
|
|
||||||
}
|
|
||||||
|
|
||||||
static T const* get_const_pointer(T const& x)
|
|
||||||
{
|
|
||||||
return &x;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Arg>
|
|
||||||
static T* passthru(Arg x)
|
|
||||||
{
|
|
||||||
return get_pointer(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Arg>
|
|
||||||
static T const* cref_passthru(Arg x)
|
|
||||||
{
|
|
||||||
return get_const_pointer(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test(T x)
|
|
||||||
{
|
|
||||||
BOOST_CHECK(passthru(ref(x)) == &x);
|
|
||||||
BOOST_CHECK(&ref(x).get() == &x);
|
|
||||||
|
|
||||||
BOOST_CHECK(cref_passthru(cref(x)) == &x);
|
|
||||||
BOOST_CHECK(&cref(x).get() == &x);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct copy_counter {
|
|
||||||
static int count_;
|
|
||||||
copy_counter(copy_counter const& /*other*/) {
|
|
||||||
++count_;
|
|
||||||
}
|
|
||||||
copy_counter() {}
|
|
||||||
static void reset() { count_ = 0; }
|
|
||||||
static int count() { return copy_counter::count_; }
|
|
||||||
};
|
|
||||||
|
|
||||||
int copy_counter::count_ = 0;
|
|
||||||
|
|
||||||
} // namespace unnamed
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
void do_unwrap(T t) {
|
|
||||||
|
|
||||||
/* typename unwrap_reference<T>::type& lt = */
|
|
||||||
unwrap_ref(t);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void unwrap_test() {
|
|
||||||
|
|
||||||
int i = 3;
|
|
||||||
const int ci = 2;
|
|
||||||
|
|
||||||
do_unwrap(i);
|
|
||||||
do_unwrap(ci);
|
|
||||||
do_unwrap(ref(i));
|
|
||||||
do_unwrap(cref(ci));
|
|
||||||
do_unwrap(ref(ci));
|
|
||||||
|
|
||||||
copy_counter cc;
|
|
||||||
BOOST_CHECK(cc.count() == 0);
|
|
||||||
|
|
||||||
do_unwrap(cc);
|
|
||||||
do_unwrap(ref(cc));
|
|
||||||
do_unwrap(cref(cc));
|
|
||||||
|
|
||||||
BOOST_CHECK(cc.count() == 1);
|
|
||||||
BOOST_CHECK(unwrap_ref(ref(cc)).count() == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int test_main(int, char * [])
|
|
||||||
{
|
|
||||||
ref_wrapper<int>::test(1);
|
|
||||||
ref_wrapper<int const>::test(1);
|
|
||||||
unwrap_test();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user