]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/multiprecision/test/test_nothrow_float128.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / multiprecision / test / test_nothrow_float128.cpp
CommitLineData
7c673cae
FG
1///////////////////////////////////////////////////////////////////////////////
2// Copyright 2015 John Maddock. Distributed under the Boost
3// Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/multiprecision/float128.hpp>
7#include <boost/type_traits/is_nothrow_move_constructible.hpp>
8#include <boost/type_traits/is_nothrow_move_assignable.hpp>
9#include <boost/type_traits/has_nothrow_constructor.hpp>
10#include <boost/type_traits/has_nothrow_assign.hpp>
11#include <boost/type_traits/has_nothrow_copy.hpp>
12#include <boost/static_assert.hpp>
13
14#ifndef BOOST_NO_CXX11_NOEXCEPT
15
16#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) || defined(BOOST_IS_NOTHROW_MOVE_CONSTRUCT)
17//
18// Move construct:
19//
20BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::float128>::value);
21
22#endif
23
24#if !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_SFINAE_EXPR) || defined(BOOST_IS_NOTHROW_MOVE_ASSIGN)
25//
26// Move assign:
27//
28BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::float128>::value);
29
30#endif
31
32//
33// Construct:
34//
35#ifdef BOOST_HAS_NOTHROW_CONSTRUCTOR
36BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::float128>::value);
37#endif
38//
39// Copy construct:
40//
41#ifdef BOOST_HAS_NOTHROW_COPY
42BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::float128>::value);
43#endif
44//
45// Assign:
46//
47#ifdef BOOST_HAS_NOTHROW_ASSIGN
48BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::float128>::value);
49#endif
50
51BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128()));
52BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<const boost::multiprecision::float128&>())));
53BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<boost::multiprecision::float128>())));
54BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<const float128_type&>())));
55BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<float128_type>())));
56BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<const double&>())));
57BOOST_STATIC_ASSERT(noexcept(boost::multiprecision::float128(std::declval<double>())));
58BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<const boost::multiprecision::float128&>()));
59BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<boost::multiprecision::float128>()));
60BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<const float128_type&>()));
61BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<float128_type>()));
62BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<const double&>()));
63BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<double>()));
64
65struct any_convert
66{
67 template <class T>
92f5a8d4 68 operator T() const; // Can throw!
7c673cae
FG
69};
70
71BOOST_STATIC_ASSERT(!noexcept(boost::multiprecision::float128(std::declval<const any_convert&>())));
72BOOST_STATIC_ASSERT(!noexcept(boost::multiprecision::float128(std::declval<any_convert>())));
73BOOST_STATIC_ASSERT(!noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<const any_convert&>()));
74BOOST_STATIC_ASSERT(!noexcept(std::declval<boost::multiprecision::float128&>() = std::declval<any_convert>()));
75
76#endif // noexcept