ttg 1.0.0
Template Task Graph (TTG): flowgraph-based programming model for high-performance distributed-memory algorithms
Loading...
Searching...
No Matches
remove_noexcept.hpp
Go to the documentation of this file.
1/*
2@file remove_noexcept
3
4@Copyright Barrett Adair 2015-2017
5Distributed under the Boost Software License, Version 1.0.
6(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
7
8*/
9
10#ifndef BOOST_CLBL_TRTS_REMOVE_NOEXCEPT_HPP
11#define BOOST_CLBL_TRTS_REMOVE_NOEXCEPT_HPP
12
14
15namespace boost { namespace callable_traits {
16
18BOOST_CLBL_TRTS_SFINAE_MSG(remove_noexcept, cannot_remove_noexcept_from_this_type)
19
20//[ remove_noexcept_hpp
21/*`
22[section:ref_remove_noexcept remove_noexcept]
23[heading Header]
24``#include <boost/callable_traits/remove_noexcept.hpp>``
25[heading Definition]
26*/
27
28template<typename T>
29using remove_noexcept_t = //see below
30//<-
33 cannot_remove_noexcept_from_this_type>;
34
35namespace detail {
36
37 template<typename T, typename = std::false_type>
39
40 template<typename T>
41 struct remove_noexcept_impl <T, typename std::is_same<
42 remove_noexcept_t<T>, detail::dummy>::type>
43 {
45 };
46}
47
48//->
49
50template<typename T>
52
53//<-
54}} // namespace boost::callable_traits
55//->
56
57/*`
58
59[heading Constraints]
60* `T` must be one of the following:
61 * function type
62 * function pointer type
63 * function reference type
64 * member function pointer type
65* If `T` is a pointer, it may not be cv/ref qualified
66
67[heading Behavior]
68* A substitution failure occurs if the constraints are violated.
69* Removes the `noexcept` specifier from `T`, if present.
70
71[heading Input/Output Examples]
72[table
73 [[`T`] [`remove_noexcept_t<T>`]]
74 [[`int() const noexcept`] [`int() const`]]
75 [[`int(*)() noexcept`] [`int(*)()`]]
76 [[`int(&)() noexcept`] [`int(&)()`]]
77 [[`int(foo::*)() noexcept`] [`int(foo::*)()`]]
78 [[`int() const`] [`int() const`]]
79 [[`int(*)()`] [`int(*)()`]]
80 [[`int(&)()`] [`int(&)()`]]
81 [[`int`] [(substitution failure)]]
82 [[`int foo::*`] [(substitution failure)]]
83 [[`int (foo::* const)()`] [(substitution failure)]]
84]
85
86[heading Example Program]
87[import ../example/remove_noexcept.cpp]
88[remove_noexcept]
89[endsect]
90*/
91//]
92
93#endif // #ifndef BOOST_CLBL_TRTS_REMOVE_NOEXCEPT_HPP
sfinae_try< T, fail_when_same< U, invalid_type, ErrorType >, fail_when_same< U, reference_error, reference_type_not_supported_by_this_metafunction > > try_but_fail_if_invalid
Definition utility.hpp:58
typename BOOST_CLBL_TRTS_DISJUNCTION(function_object< unwrap_reference< T > >, function< T >, pmf< T >, pmd< T >, default_callable_traits< T >)::traits traits
Definition traits.hpp:25
detail::try_but_fail_if_invalid< typename detail::traits< T >::remove_noexcept, cannot_remove_noexcept_from_this_type > remove_noexcept_t
STL namespace.
#define BOOST_CLBL_TRTS_SFINAE_MSG(origin, name)
#define BOOST_CLBL_TRTS_DEFINE_SFINAE_ERROR_ORIGIN(origin)