mirror of
https://github.com/boostorg/smart_ptr.git
synced 2026-04-28 18:13:34 +02:00
Use throw() in place of noexcept on msvc-11.0,12.0 for the standard nothrow traits
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
//
|
||||
// sp_nothrow_test.cpp
|
||||
//
|
||||
// Copyright 2016 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/config.hpp>
|
||||
|
||||
#if defined( BOOST_NO_CXX11_HDR_TYPE_TRAITS )
|
||||
|
||||
int main()
|
||||
{
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/shared_array.hpp>
|
||||
#include <boost/weak_ptr.hpp>
|
||||
#include <boost/enable_shared_from_this.hpp>
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
#include <boost/scoped_array.hpp>
|
||||
#include <boost/intrusive_ptr.hpp>
|
||||
#include <boost/core/lightweight_test_trait.hpp>
|
||||
#include <type_traits>
|
||||
|
||||
template<class T> void test_copy()
|
||||
{
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_copy_constructible<T> ));
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_copy_assignable<T> ));
|
||||
}
|
||||
|
||||
template<class T> void test_move()
|
||||
{
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_move_constructible<T> ));
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_move_assignable<T> ));
|
||||
}
|
||||
|
||||
template<class T> void test_default()
|
||||
{
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_default_constructible<T> ));
|
||||
}
|
||||
|
||||
template<class T> void test_destroy()
|
||||
{
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_destructible<T> ));
|
||||
}
|
||||
|
||||
template<class T> void test_cmd()
|
||||
{
|
||||
test_copy<T>();
|
||||
test_move<T>();
|
||||
test_default<T>();
|
||||
}
|
||||
|
||||
struct X
|
||||
{
|
||||
};
|
||||
|
||||
struct Y: public boost::enable_shared_from_this<Y>
|
||||
{
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
test_cmd< boost::shared_ptr<X> >();
|
||||
test_cmd< boost::shared_array<X> >();
|
||||
test_cmd< boost::weak_ptr<X> >();
|
||||
|
||||
test_copy< Y >();
|
||||
test_default< Y >();
|
||||
test_destroy< Y >();
|
||||
|
||||
// test_move< Y >();
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_move_constructible<Y> ));
|
||||
|
||||
#if !( defined( BOOST_MSVC ) && BOOST_MSVC == 1700 )
|
||||
|
||||
BOOST_TEST_TRAIT_TRUE(( std::is_nothrow_move_assignable<Y> ));
|
||||
|
||||
#endif
|
||||
|
||||
test_default< boost::scoped_ptr<X> >();
|
||||
test_default< boost::scoped_array<X> >();
|
||||
|
||||
test_move< boost::intrusive_ptr<X> >();
|
||||
test_default< boost::intrusive_ptr<X> >();
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
#endif // #if defined( BOOST_NO_CXX11_HDR_TYPE_TRAITS )
|
||||
Reference in New Issue
Block a user