mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-05-10 09:23:30 +00:00
add type_traits is_swappable, conjunction, disjunction, negation
This commit is contained in:
parent
913dc8ca44
commit
aa8e265188
18 changed files with 323 additions and 10 deletions
|
@ -9,8 +9,8 @@
|
||||||
#define SPROUT_CONTAINER_STD_COMPLEX_HPP
|
#define SPROUT_CONTAINER_STD_COMPLEX_HPP
|
||||||
|
|
||||||
#include <complex>
|
#include <complex>
|
||||||
#include <type_traits>
|
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
#include <type_traits>
|
||||||
#include <sprout/workaround/std/cstddef.hpp>
|
#include <sprout/workaround/std/cstddef.hpp>
|
||||||
#include <sprout/utility/forward.hpp>
|
#include <sprout/utility/forward.hpp>
|
||||||
#include <sprout/container/traits.hpp>
|
#include <sprout/container/traits.hpp>
|
||||||
|
@ -25,7 +25,7 @@ namespace sprout {
|
||||||
operator()(Complex const& c, Index i) const {
|
operator()(Complex const& c, Index i) const {
|
||||||
return i == 0 ? c.real()
|
return i == 0 ? c.real()
|
||||||
: i == 1 ? c.imag()
|
: i == 1 ? c.imag()
|
||||||
: throw std::out_of_range("std_complex_at<>: index out of range")
|
: throw std::out_of_range("std_complex_at: index out of range")
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <stdexcept>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <sprout/config.hpp>
|
#include <sprout/config.hpp>
|
||||||
|
@ -29,7 +30,6 @@
|
||||||
#include <sprout/type_traits/identity.hpp>
|
#include <sprout/type_traits/identity.hpp>
|
||||||
#include <sprout/detail/nil_base.hpp>
|
#include <sprout/detail/nil_base.hpp>
|
||||||
#include <sprout/detail/static_size.hpp>
|
#include <sprout/detail/static_size.hpp>
|
||||||
#include <sprout/assert.hpp>
|
|
||||||
|
|
||||||
namespace sprout {
|
namespace sprout {
|
||||||
//
|
//
|
||||||
|
@ -348,7 +348,7 @@ namespace sprout {
|
||||||
{
|
{
|
||||||
return i == 0 ? d.quot
|
return i == 0 ? d.quot
|
||||||
: i == 1 ? d.rem
|
: i == 1 ? d.rem
|
||||||
: (SPROUT_ASSERT(i < 2), d.quot)
|
: (throw std::out_of_range("div_at: index out of range"), d.quot)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
template<typename Div>
|
template<typename Div>
|
||||||
|
@ -358,7 +358,7 @@ namespace sprout {
|
||||||
{
|
{
|
||||||
return i == 0 ? d.quot
|
return i == 0 ? d.quot
|
||||||
: i == 1 ? d.rem
|
: i == 1 ? d.rem
|
||||||
: (SPROUT_ASSERT(i < 2), d.quot)
|
: (throw std::out_of_range("div_at: index out of range"), d.quot)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace sprout {
|
||||||
template<typename Message>
|
template<typename Message>
|
||||||
static void warn() {}
|
static void warn() {}
|
||||||
};
|
};
|
||||||
template <>
|
template<>
|
||||||
struct static_warning<false> {
|
struct static_warning<false> {
|
||||||
template<typename Message>
|
template<typename Message>
|
||||||
static void warn() {
|
static void warn() {
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace sprout {
|
||||||
: public sprout::detail::undecayed_common_type_impl<void, typename sprout::detail::undecayed_common_type2<T1, T2>::type, Tail...>
|
: public sprout::detail::undecayed_common_type_impl<void, typename sprout::detail::undecayed_common_type2<T1, T2>::type, Tail...>
|
||||||
{};
|
{};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
template <typename... Types>
|
template<typename... Types>
|
||||||
struct undecayed_common_type
|
struct undecayed_common_type
|
||||||
: public sprout::detail::undecayed_common_type_impl<void, Types...>
|
: public sprout::detail::undecayed_common_type_impl<void, Types...>
|
||||||
{};
|
{};
|
||||||
|
@ -58,7 +58,7 @@ namespace sprout {
|
||||||
: public std::decay<typename CommonType::type>
|
: public std::decay<typename CommonType::type>
|
||||||
{};
|
{};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
template <typename... Types>
|
template<typename... Types>
|
||||||
struct common_type
|
struct common_type
|
||||||
: public sprout::detail::common_type_impl<sprout::undecayed_common_type<Types...> >
|
: public sprout::detail::common_type_impl<sprout::undecayed_common_type<Types...> >
|
||||||
{};
|
{};
|
||||||
|
|
29
sprout/type_traits/conjunction.hpp
Normal file
29
sprout/type_traits/conjunction.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_CONJUNCTION_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_CONJUNCTION_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/tpp/algorithm/all_of.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// conjunction
|
||||||
|
//
|
||||||
|
template<typename... Types>
|
||||||
|
struct conjunction
|
||||||
|
: public sprout::tpp::all_of<Types...>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename... Types>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool conjunction_v = sprout::conjunction<Types...>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_CONJUNCTION_HPP
|
29
sprout/type_traits/disjunction.hpp
Normal file
29
sprout/type_traits/disjunction.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_DISJUNCTION_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_DISJUNCTION_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/tpp/algorithm/any_of.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// disjunction
|
||||||
|
//
|
||||||
|
template<typename... Types>
|
||||||
|
struct disjunction
|
||||||
|
: public sprout::tpp::any_of<Types...>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename... Types>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool disjunction_v = sprout::disjunction<Types...>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_DISJUNCTION_HPP
|
|
@ -19,6 +19,11 @@ namespace sprout {
|
||||||
public:
|
public:
|
||||||
typedef R type;
|
typedef R type;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
template<typename T, typename R = void>
|
||||||
|
using enable_if_has_type_t = typename sprout::enable_if_has_type<T, R>::type;
|
||||||
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
} // namespace sprout
|
} // namespace sprout
|
||||||
|
|
||||||
#endif // #ifndef SPROUT_TYPE_TRAITS_ENABLE_IF_HAS_TYPE_HPP
|
#endif // #ifndef SPROUT_TYPE_TRAITS_ENABLE_IF_HAS_TYPE_HPP
|
||||||
|
|
29
sprout/type_traits/is_nothrow_swappable.hpp
Normal file
29
sprout/type_traits/is_nothrow_swappable.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type_traits/is_nothrow_swappable_with.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// is_nothrow_swappable
|
||||||
|
//
|
||||||
|
template<typename T>
|
||||||
|
struct is_nothrow_swappable
|
||||||
|
: public sprout::is_nothrow_swappable_with<T&, T&>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename T>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool is_nothrow_swappable_v = sprout::is_nothrow_swappable<T>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_HPP
|
53
sprout/type_traits/is_nothrow_swappable_with.hpp
Normal file
53
sprout/type_traits/is_nothrow_swappable_with.hpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_WITH_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_WITH_HPP
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type_traits/integral_constant.hpp>
|
||||||
|
#include <sprout/type_traits/is_swappable_with.hpp>
|
||||||
|
|
||||||
|
namespace sprout_nothrow_swappable_detail {
|
||||||
|
using std::swap;
|
||||||
|
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_nothrow_swappable_with
|
||||||
|
: public sprout::bool_constant<
|
||||||
|
SPROUT_NOEXCEPT_EXPR(swap(std::declval<T>(), std::declval<U>()))
|
||||||
|
&& SPROUT_NOEXCEPT_EXPR(swap(std::declval<U>(), std::declval<T>()))
|
||||||
|
>::type
|
||||||
|
{};
|
||||||
|
} // namespace sprout_nothrow_swappable_detail
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
namespace detail {
|
||||||
|
template<typename T, typename U, bool = false>
|
||||||
|
struct is_nothrow_swappable_with_impl
|
||||||
|
: public sprout::false_type
|
||||||
|
{};
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_nothrow_swappable_with_impl<T, U, true>
|
||||||
|
: public sprout_nothrow_swappable_detail::is_nothrow_swappable_with<T, U>
|
||||||
|
{};
|
||||||
|
} // namespace detail
|
||||||
|
//
|
||||||
|
// is_nothrow_swappable_with
|
||||||
|
//
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_nothrow_swappable_with
|
||||||
|
: public sprout::detail::is_nothrow_swappable_with_impl<T, U, sprout::is_swappable_with<T, U>::value>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename T, typename U>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool is_nothrow_swappable_with_v = sprout::is_nothrow_swappable_with<T>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_IS_NOTHROW_SWAPPABLE_WITH_HPP
|
|
@ -27,7 +27,7 @@ namespace sprout {
|
||||||
: public sprout::detail::type_traits_wrapper<std::is_signed<T> >
|
: public sprout::detail::type_traits_wrapper<std::is_signed<T> >
|
||||||
{};
|
{};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
template <typename T>
|
template<typename T>
|
||||||
struct is_signed
|
struct is_signed
|
||||||
: public sprout::detail::is_signed_impl<T>
|
: public sprout::detail::is_signed_impl<T>
|
||||||
{};
|
{};
|
||||||
|
|
29
sprout/type_traits/is_swappable.hpp
Normal file
29
sprout/type_traits/is_swappable.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_IS_SWAPPABLE_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_IS_SWAPPABLE_WITH_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type_traits/is_swappable_with.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// is_swappable
|
||||||
|
//
|
||||||
|
template<typename T>
|
||||||
|
struct is_swappable
|
||||||
|
: public sprout::is_swappable_with<T&, T&>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename T>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool is_swappable_v = sprout::is_swappable<T>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_IS_SWAPPABLE_HPP
|
58
sprout/type_traits/is_swappable_with.hpp
Normal file
58
sprout/type_traits/is_swappable_with.hpp
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_IS_SWAPPABLE_WITH_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_IS_SWAPPABLE_WITH_HPP
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type_traits/integral_constant.hpp>
|
||||||
|
#include <sprout/type_traits/identity.hpp>
|
||||||
|
|
||||||
|
namespace sprout_swappable_detail {
|
||||||
|
using std::swap;
|
||||||
|
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_swappable_with_test {
|
||||||
|
public:
|
||||||
|
template<
|
||||||
|
typename T1 = T, typename U1 = U,
|
||||||
|
typename = typename sprout::identity<decltype(swap(std::declval<T1>(), std::declval<U1>()))>::type,
|
||||||
|
typename = typename sprout::identity<decltype(swap(std::declval<U1>(), std::declval<T1>()))>::type
|
||||||
|
>
|
||||||
|
static sprout::true_type test(int);
|
||||||
|
static sprout::false_type test(...);
|
||||||
|
};
|
||||||
|
#if defined(_MSC_VER) && (_MSC_VER > 1900)
|
||||||
|
template<typename T, typename U, typename Base_ = typename sprout::identity<decltype(sprout_swappable_detail::is_swappable_with_test<T, U>::test(0))>::type>
|
||||||
|
struct is_swappable_with
|
||||||
|
: public Base_
|
||||||
|
{};
|
||||||
|
#else
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_swappable_with
|
||||||
|
: public sprout::identity<decltype(sprout_swappable_detail::is_swappable_with_test<T, U>::test(0))>::type
|
||||||
|
{};
|
||||||
|
#endif
|
||||||
|
} // namespace sprout_swappable_detail
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// is_swappable_with
|
||||||
|
//
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct is_swappable_with
|
||||||
|
: public sprout_swappable_detail::is_swappable_with<T, U>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename T, typename U>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool is_swappable_with_v = sprout::is_swappable_with<T>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_IS_SWAPPABLE_WITH_HPP
|
|
@ -27,7 +27,7 @@ namespace sprout {
|
||||||
: public sprout::detail::type_traits_wrapper<std::is_unsigned<T> >
|
: public sprout::detail::type_traits_wrapper<std::is_unsigned<T> >
|
||||||
{};
|
{};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
template <typename T>
|
template<typename T>
|
||||||
struct is_unsigned
|
struct is_unsigned
|
||||||
: public sprout::detail::is_unsigned_impl<T>
|
: public sprout::detail::is_unsigned_impl<T>
|
||||||
{};
|
{};
|
||||||
|
|
17
sprout/type_traits/logical.hpp
Normal file
17
sprout/type_traits/logical.hpp
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_LOGICAL_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_LOGICAL_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
// logical operator traits:
|
||||||
|
#include <sprout/type_traits/conjunction.hpp>
|
||||||
|
#include <sprout/type_traits/disjunction.hpp>
|
||||||
|
#include <sprout/type_traits/negation.hpp>
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_LOGICAL_HPP
|
29
sprout/type_traits/negation.hpp
Normal file
29
sprout/type_traits/negation.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_NEGATION_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_NEGATION_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
#include <sprout/type_traits/integral_constant.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// negation
|
||||||
|
//
|
||||||
|
template<typename T>
|
||||||
|
struct negation
|
||||||
|
: public sprout::bool_constant<!T::value>
|
||||||
|
{};
|
||||||
|
|
||||||
|
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
template<typename T>
|
||||||
|
SPROUT_STATIC_CONSTEXPR bool negation_v = sprout::negation<T>::value;
|
||||||
|
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_NEGATION_HPP
|
|
@ -30,6 +30,8 @@
|
||||||
#include <sprout/type_traits/is_assignable.hpp>
|
#include <sprout/type_traits/is_assignable.hpp>
|
||||||
#include <sprout/type_traits/is_copy_assignable.hpp>
|
#include <sprout/type_traits/is_copy_assignable.hpp>
|
||||||
#include <sprout/type_traits/is_move_assignable.hpp>
|
#include <sprout/type_traits/is_move_assignable.hpp>
|
||||||
|
#include <sprout/type_traits/is_swappable_with.hpp>
|
||||||
|
#include <sprout/type_traits/is_swappable.hpp>
|
||||||
#include <sprout/type_traits/is_destructible.hpp>
|
#include <sprout/type_traits/is_destructible.hpp>
|
||||||
#include <sprout/type_traits/is_trivially_constructible.hpp>
|
#include <sprout/type_traits/is_trivially_constructible.hpp>
|
||||||
#include <sprout/type_traits/is_trivially_default_constructible.hpp>
|
#include <sprout/type_traits/is_trivially_default_constructible.hpp>
|
||||||
|
@ -46,6 +48,8 @@
|
||||||
#include <sprout/type_traits/is_nothrow_assignable.hpp>
|
#include <sprout/type_traits/is_nothrow_assignable.hpp>
|
||||||
#include <sprout/type_traits/is_nothrow_copy_assignable.hpp>
|
#include <sprout/type_traits/is_nothrow_copy_assignable.hpp>
|
||||||
#include <sprout/type_traits/is_nothrow_move_assignable.hpp>
|
#include <sprout/type_traits/is_nothrow_move_assignable.hpp>
|
||||||
|
#include <sprout/type_traits/is_nothrow_swappable_with.hpp>
|
||||||
|
#include <sprout/type_traits/is_nothrow_swappable.hpp>
|
||||||
#include <sprout/type_traits/is_nothrow_destructible.hpp>
|
#include <sprout/type_traits/is_nothrow_destructible.hpp>
|
||||||
#include <sprout/type_traits/has_virtual_destructor.hpp>
|
#include <sprout/type_traits/has_virtual_destructor.hpp>
|
||||||
|
|
||||||
|
|
|
@ -21,5 +21,7 @@
|
||||||
#include <sprout/type_traits/array_modification.hpp>
|
#include <sprout/type_traits/array_modification.hpp>
|
||||||
#include <sprout/type_traits/pointer_modification.hpp>
|
#include <sprout/type_traits/pointer_modification.hpp>
|
||||||
#include <sprout/type_traits/transformation.hpp>
|
#include <sprout/type_traits/transformation.hpp>
|
||||||
|
#include <sprout/type_traits/logical.hpp>
|
||||||
|
#include <sprout/type_traits/voider.hpp>
|
||||||
|
|
||||||
#endif // #ifndef SPROUT_TYPE_TRAITS_STD_TYPE_TRAITS_HPP
|
#endif // #ifndef SPROUT_TYPE_TRAITS_STD_TYPE_TRAITS_HPP
|
||||||
|
|
29
sprout/type_traits/voider.hpp
Normal file
29
sprout/type_traits/voider.hpp
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*=============================================================================
|
||||||
|
Copyright (c) 2011-2016 Bolero MURAKAMI
|
||||||
|
https://github.com/bolero-MURAKAMI/Sprout
|
||||||
|
|
||||||
|
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)
|
||||||
|
=============================================================================*/
|
||||||
|
#ifndef SPROUT_TYPE_TRAITS_VOIDER_HPP
|
||||||
|
#define SPROUT_TYPE_TRAITS_VOIDER_HPP
|
||||||
|
|
||||||
|
#include <sprout/config.hpp>
|
||||||
|
|
||||||
|
namespace sprout {
|
||||||
|
//
|
||||||
|
// voider
|
||||||
|
//
|
||||||
|
template<typename...>
|
||||||
|
struct voider {
|
||||||
|
public:
|
||||||
|
typedef void type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
template<typename...>
|
||||||
|
using void_t = void;
|
||||||
|
#endif // #if SPROUT_USE_TEMPLATE_ALIASES
|
||||||
|
} // namespace sprout
|
||||||
|
|
||||||
|
#endif // #ifndef SPROUT_TYPE_TRAITS_VOIDER_HPP
|
Loading…
Add table
Reference in a new issue