aboutsummaryrefslogtreecommitdiff
path: root/tests/libcxx/include/__functional_03
diff options
context:
space:
mode:
Diffstat (limited to 'tests/libcxx/include/__functional_03')
-rw-r--r--tests/libcxx/include/__functional_032128
1 files changed, 0 insertions, 2128 deletions
diff --git a/tests/libcxx/include/__functional_03 b/tests/libcxx/include/__functional_03
deleted file mode 100644
index 25d8ab93..00000000
--- a/tests/libcxx/include/__functional_03
+++ /dev/null
@@ -1,2128 +0,0 @@
-// -*- C++ -*-
-//===----------------------------------------------------------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP_FUNCTIONAL_03
-#define _LIBCPP_FUNCTIONAL_03
-
-// manual variadic expansion for <functional>
-
-#pragma GCC system_header
-
-template <class _Tp>
-class __mem_fn
- : public __weak_result_type<_Tp>
-{
-public:
- // types
- typedef _Tp type;
-private:
- type __f_;
-
-public:
- _LIBCPP_INLINE_VISIBILITY __mem_fn(type __f) : __f_(__f) {}
-
- // invoke
-
- typename __invoke_return<type>::type
- operator() ()
- {
- return __invoke(__f_);
- }
-
- template <class _A0>
- typename __invoke_return0<type, _A0>::type
- operator() (_A0& __a0)
- {
- return __invoke(__f_, __a0);
- }
-
- template <class _A0, class _A1>
- typename __invoke_return1<type, _A0, _A1>::type
- operator() (_A0& __a0, _A1& __a1)
- {
- return __invoke(__f_, __a0, __a1);
- }
-
- template <class _A0, class _A1, class _A2>
- typename __invoke_return2<type, _A0, _A1, _A2>::type
- operator() (_A0& __a0, _A1& __a1, _A2& __a2)
- {
- return __invoke(__f_, __a0, __a1, __a2);
- }
-};
-
-template<class _R, class _T>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R _T::*>
-mem_fn(_R _T::* __pm)
-{
- return __mem_fn<_R _T::*>(__pm);
-}
-
-template<class _R, class _T>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)()>
-mem_fn(_R (_T::* __pm)())
-{
- return __mem_fn<_R (_T::*)()>(__pm);
-}
-
-template<class _R, class _T, class _A0>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0)>
-mem_fn(_R (_T::* __pm)(_A0))
-{
- return __mem_fn<_R (_T::*)(_A0)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1)>
-mem_fn(_R (_T::* __pm)(_A0, _A1))
-{
- return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1, class _A2>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1, _A2)>
-mem_fn(_R (_T::* __pm)(_A0, _A1, _A2))
-{
- return __mem_fn<_R (_T::*)(_A0, _A1, _A2)>(__pm);
-}
-
-template<class _R, class _T>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)()>
-mem_fn(_R (_T::* __pm)() const)
-{
- return __mem_fn<_R (_T::*)()>(__pm);
-}
-
-template<class _R, class _T, class _A0>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0)>
-mem_fn(_R (_T::* __pm)(_A0) const)
-{
- return __mem_fn<_R (_T::*)(_A0)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1)>
-mem_fn(_R (_T::* __pm)(_A0, _A1) const)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1, class _A2>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1, _A2)>
-mem_fn(_R (_T::* __pm)(_A0, _A1, _A2) const)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1, _A2)>(__pm);
-}
-
-template<class _R, class _T>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)()>
-mem_fn(_R (_T::* __pm)() volatile)
-{
- return __mem_fn<_R (_T::*)()>(__pm);
-}
-
-template<class _R, class _T, class _A0>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0)>
-mem_fn(_R (_T::* __pm)(_A0) volatile)
-{
- return __mem_fn<_R (_T::*)(_A0)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1)>
-mem_fn(_R (_T::* __pm)(_A0, _A1) volatile)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1, class _A2>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1, _A2)>
-mem_fn(_R (_T::* __pm)(_A0, _A1, _A2) volatile)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1, _A2)>(__pm);
-}
-
-template<class _R, class _T>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)()>
-mem_fn(_R (_T::* __pm)() const volatile)
-{
- return __mem_fn<_R (_T::*)()>(__pm);
-}
-
-template<class _R, class _T, class _A0>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0)>
-mem_fn(_R (_T::* __pm)(_A0) const volatile)
-{
- return __mem_fn<_R (_T::*)(_A0)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1)>
-mem_fn(_R (_T::* __pm)(_A0, _A1) const volatile)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1)>(__pm);
-}
-
-template<class _R, class _T, class _A0, class _A1, class _A2>
-inline _LIBCPP_INLINE_VISIBILITY
-__mem_fn<_R (_T::*)(_A0, _A1, _A2)>
-mem_fn(_R (_T::* __pm)(_A0, _A1, _A2) const volatile)
-{
- return __mem_fn<_R (_T::*)(_A0, _A1, _A2)>(__pm);
-}
-
-// bad_function_call
-
-class _LIBCPP_EXCEPTION_ABI bad_function_call
- : public exception
-{
-};
-
-template<class _Fp> class _LIBCPP_VISIBLE function; // undefined
-
-namespace __function
-{
-
-template<class _F>
-struct __maybe_derive_from_unary_function
-{
-};
-
-template<class _R, class _A1>
-struct __maybe_derive_from_unary_function<_R(_A1)>
- : public unary_function<_A1, _R>
-{
-};
-
-template<class _F>
-struct __maybe_derive_from_binary_function
-{
-};
-
-template<class _R, class _A1, class _A2>
-struct __maybe_derive_from_binary_function<_R(_A1, _A2)>
- : public binary_function<_A1, _A2, _R>
-{
-};
-
-template<class _Fp> class __base;
-
-template<class _R>
-class __base<_R()>
-{
- __base(const __base&);
- __base& operator=(const __base&);
-public:
- __base() {}
- virtual ~__base() {}
- virtual __base* __clone() const = 0;
- virtual void __clone(__base*) const = 0;
- virtual void destroy() = 0;
- virtual void destroy_deallocate() = 0;
- virtual _R operator()() = 0;
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const = 0;
- virtual const std::type_info& target_type() const = 0;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _R, class _A0>
-class __base<_R(_A0)>
-{
- __base(const __base&);
- __base& operator=(const __base&);
-public:
- __base() {}
- virtual ~__base() {}
- virtual __base* __clone() const = 0;
- virtual void __clone(__base*) const = 0;
- virtual void destroy() = 0;
- virtual void destroy_deallocate() = 0;
- virtual _R operator()(_A0) = 0;
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const = 0;
- virtual const std::type_info& target_type() const = 0;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _R, class _A0, class _A1>
-class __base<_R(_A0, _A1)>
-{
- __base(const __base&);
- __base& operator=(const __base&);
-public:
- __base() {}
- virtual ~__base() {}
- virtual __base* __clone() const = 0;
- virtual void __clone(__base*) const = 0;
- virtual void destroy() = 0;
- virtual void destroy_deallocate() = 0;
- virtual _R operator()(_A0, _A1) = 0;
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const = 0;
- virtual const std::type_info& target_type() const = 0;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _R, class _A0, class _A1, class _A2>
-class __base<_R(_A0, _A1, _A2)>
-{
- __base(const __base&);
- __base& operator=(const __base&);
-public:
- __base() {}
- virtual ~__base() {}
- virtual __base* __clone() const = 0;
- virtual void __clone(__base*) const = 0;
- virtual void destroy() = 0;
- virtual void destroy_deallocate() = 0;
- virtual _R operator()(_A0, _A1, _A2) = 0;
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const = 0;
- virtual const std::type_info& target_type() const = 0;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _FD, class _Alloc, class _FB> class __func;
-
-template<class _F, class _Alloc, class _R>
-class __func<_F, _Alloc, _R()>
- : public __base<_R()>
-{
- __compressed_pair<_F, _Alloc> __f_;
-public:
- explicit __func(_F __f) : __f_(_STD::move(__f)) {}
- explicit __func(_F __f, _Alloc __a) : __f_(_STD::move(__f), _STD::move(__a)) {}
- virtual __base<_R()>* __clone() const;
- virtual void __clone(__base<_R()>*) const;
- virtual void destroy();
- virtual void destroy_deallocate();
- virtual _R operator()();
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const;
- virtual const std::type_info& target_type() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _F, class _Alloc, class _R>
-__base<_R()>*
-__func<_F, _Alloc, _R()>::__clone() const
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__func, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) __func(__f_.first(), _Alloc(__a));
- return __hold.release();
-}
-
-template<class _F, class _Alloc, class _R>
-void
-__func<_F, _Alloc, _R()>::__clone(__base<_R()>* __p) const
-{
- ::new (__p) __func(__f_.first(), __f_.second());
-}
-
-template<class _F, class _Alloc, class _R>
-void
-__func<_F, _Alloc, _R()>::destroy()
-{
- __f_.~__compressed_pair<_F, _Alloc>();
-}
-
-template<class _F, class _Alloc, class _R>
-void
-__func<_F, _Alloc, _R()>::destroy_deallocate()
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- __f_.~__compressed_pair<_F, _Alloc>();
- __a.deallocate(this, 1);
-}
-
-template<class _F, class _Alloc, class _R>
-_R
-__func<_F, _Alloc, _R()>::operator()()
-{
- return __invoke(__f_.first());
-}
-
-#ifndef _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R>
-const void*
-__func<_F, _Alloc, _R()>::target(const type_info& __ti) const
-{
- if (__ti == typeid(_F))
- return &__f_.first();
- return (const void*)0;
-}
-
-template<class _F, class _Alloc, class _R>
-const std::type_info&
-__func<_F, _Alloc, _R()>::target_type() const
-{
- return typeid(_F);
-}
-
-#endif // _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0>
-class __func<_F, _Alloc, _R(_A0)>
- : public __base<_R(_A0)>
-{
- __compressed_pair<_F, _Alloc> __f_;
-public:
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f) : __f_(_STD::move(__f)) {}
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f, _Alloc __a)
- : __f_(_STD::move(__f), _STD::move(__a)) {}
- virtual __base<_R(_A0)>* __clone() const;
- virtual void __clone(__base<_R(_A0)>*) const;
- virtual void destroy();
- virtual void destroy_deallocate();
- virtual _R operator()(_A0);
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const;
- virtual const std::type_info& target_type() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _F, class _Alloc, class _R, class _A0>
-__base<_R(_A0)>*
-__func<_F, _Alloc, _R(_A0)>::__clone() const
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__func, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) __func(__f_.first(), _Alloc(__a));
- return __hold.release();
-}
-
-template<class _F, class _Alloc, class _R, class _A0>
-void
-__func<_F, _Alloc, _R(_A0)>::__clone(__base<_R(_A0)>* __p) const
-{
- ::new (__p) __func(__f_.first(), __f_.second());
-}
-
-template<class _F, class _Alloc, class _R, class _A0>
-void
-__func<_F, _Alloc, _R(_A0)>::destroy()
-{
- __f_.~__compressed_pair<_F, _Alloc>();
-}
-
-template<class _F, class _Alloc, class _R, class _A0>
-void
-__func<_F, _Alloc, _R(_A0)>::destroy_deallocate()
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- __f_.~__compressed_pair<_F, _Alloc>();
- __a.deallocate(this, 1);
-}
-
-template<class _F, class _Alloc, class _R, class _A0>
-_R
-__func<_F, _Alloc, _R(_A0)>::operator()(_A0 __a0)
-{
- return __invoke(__f_.first(), __a0);
-}
-
-#ifndef _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0>
-const void*
-__func<_F, _Alloc, _R(_A0)>::target(const type_info& __ti) const
-{
- if (__ti == typeid(_F))
- return &__f_.first();
- return (const void*)0;
-}
-
-template<class _F, class _Alloc, class _R, class _A0>
-const std::type_info&
-__func<_F, _Alloc, _R(_A0)>::target_type() const
-{
- return typeid(_F);
-}
-
-#endif // _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-class __func<_F, _Alloc, _R(_A0, _A1)>
- : public __base<_R(_A0, _A1)>
-{
- __compressed_pair<_F, _Alloc> __f_;
-public:
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f) : __f_(_STD::move(__f)) {}
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f, _Alloc __a)
- : __f_(_STD::move(__f), _STD::move(__a)) {}
- virtual __base<_R(_A0, _A1)>* __clone() const;
- virtual void __clone(__base<_R(_A0, _A1)>*) const;
- virtual void destroy();
- virtual void destroy_deallocate();
- virtual _R operator()(_A0, _A1);
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const;
- virtual const std::type_info& target_type() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-__base<_R(_A0, _A1)>*
-__func<_F, _Alloc, _R(_A0, _A1)>::__clone() const
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__func, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) __func(__f_.first(), _Alloc(__a));
- return __hold.release();
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-void
-__func<_F, _Alloc, _R(_A0, _A1)>::__clone(__base<_R(_A0, _A1)>* __p) const
-{
- ::new (__p) __func(__f_.first(), __f_.second());
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-void
-__func<_F, _Alloc, _R(_A0, _A1)>::destroy()
-{
- __f_.~__compressed_pair<_F, _Alloc>();
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-void
-__func<_F, _Alloc, _R(_A0, _A1)>::destroy_deallocate()
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- __f_.~__compressed_pair<_F, _Alloc>();
- __a.deallocate(this, 1);
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-_R
-__func<_F, _Alloc, _R(_A0, _A1)>::operator()(_A0 __a0, _A1 __a1)
-{
- return __invoke(__f_.first(), __a0, __a1);
-}
-
-#ifndef _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-const void*
-__func<_F, _Alloc, _R(_A0, _A1)>::target(const type_info& __ti) const
-{
- if (__ti == typeid(_F))
- return &__f_.first();
- return (const void*)0;
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1>
-const std::type_info&
-__func<_F, _Alloc, _R(_A0, _A1)>::target_type() const
-{
- return typeid(_F);
-}
-
-#endif // _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-class __func<_F, _Alloc, _R(_A0, _A1, _A2)>
- : public __base<_R(_A0, _A1, _A2)>
-{
- __compressed_pair<_F, _Alloc> __f_;
-public:
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f) : __f_(_STD::move(__f)) {}
- _LIBCPP_INLINE_VISIBILITY explicit __func(_F __f, _Alloc __a)
- : __f_(_STD::move(__f), _STD::move(__a)) {}
- virtual __base<_R(_A0, _A1, _A2)>* __clone() const;
- virtual void __clone(__base<_R(_A0, _A1, _A2)>*) const;
- virtual void destroy();
- virtual void destroy_deallocate();
- virtual _R operator()(_A0, _A1, _A2);
-#ifndef _LIBCPP_NO_RTTI
- virtual const void* target(const type_info&) const;
- virtual const std::type_info& target_type() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-__base<_R(_A0, _A1, _A2)>*
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::__clone() const
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__func, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) __func(__f_.first(), _Alloc(__a));
- return __hold.release();
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-void
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::__clone(__base<_R(_A0, _A1, _A2)>* __p) const
-{
- ::new (__p) __func(__f_.first(), __f_.second());
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-void
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::destroy()
-{
- __f_.~__compressed_pair<_F, _Alloc>();
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-void
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::destroy_deallocate()
-{
- typedef typename _Alloc::template rebind<__func>::other _A;
- _A __a(__f_.second());
- __f_.~__compressed_pair<_F, _Alloc>();
- __a.deallocate(this, 1);
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-_R
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::operator()(_A0 __a0, _A1 __a1, _A2 __a2)
-{
- return __invoke(__f_.first(), __a0, __a1, __a2);
-}
-
-#ifndef _LIBCPP_NO_RTTI
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-const void*
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::target(const type_info& __ti) const
-{
- if (__ti == typeid(_F))
- return &__f_.first();
- return (const void*)0;
-}
-
-template<class _F, class _Alloc, class _R, class _A0, class _A1, class _A2>
-const std::type_info&
-__func<_F, _Alloc, _R(_A0, _A1, _A2)>::target_type() const
-{
- return typeid(_F);
-}
-
-#endif // _LIBCPP_NO_RTTI
-
-} // __function
-
-template<class _R>
-class _LIBCPP_VISIBLE function<_R()>
-{
- typedef __function::__base<_R()> __base;
- aligned_storage<3*sizeof(void*)>::type __buf_;
- __base* __f_;
-
- template <class _F>
- static bool __not_null(const _F&) {return true;}
- template <class _R2>
- static bool __not_null(const function<_R()>& __p) {return __p;}
-public:
- typedef _R result_type;
-
- // 20.7.16.2.1, construct/copy/destroy:
- _LIBCPP_INLINE_VISIBILITY explicit function() : __f_(0) {}
- _LIBCPP_INLINE_VISIBILITY function(nullptr_t) : __f_(0) {}
- function(const function&);
- template<class _F>
- function(_F,
- typename enable_if<!is_integral<_F>::value>::type* = 0);
-
- template<class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- function(allocator_arg_t, const _Alloc&) : __f_(0) {}
- template<class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- function(allocator_arg_t, const _Alloc&, nullptr_t) : __f_(0) {}
- template<class _Alloc>
- function(allocator_arg_t, const _Alloc&, const function&);
- template<class _F, class _Alloc>
- function(allocator_arg_t, const _Alloc& __a, _F __f,
- typename enable_if<!is_integral<_F>::value>::type* = 0);
-
- function& operator=(const function&);
- function& operator=(nullptr_t);
- template<class _F>
- typename enable_if
- <
- !is_integral<_F>::value,
- function&
- >::type
- operator=(_F);
-
- ~function();
-
- // 20.7.16.2.2, function modifiers:
- void swap(function&);
- template<class _F, class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- void assign(_F __f, const _Alloc& __a)
- {function(allocator_arg, __a, __f).swap(*this);}
-
- // 20.7.16.2.3, function capacity:
- _LIBCPP_INLINE_VISIBILITY operator bool() const {return __f_;}
-
-private:
- // deleted overloads close possible hole in the type system
- template<class _R2>
- bool operator==(const function<_R2()>&) const;// = delete;
- template<class _R2>
- bool operator!=(const function<_R2()>&) const;// = delete;
-public:
- // 20.7.16.2.4, function invocation:
- _R operator()() const;
-
-#ifndef _LIBCPP_NO_RTTI
- // 20.7.16.2.5, function target access:
- const std::type_info& target_type() const;
- template <typename _T> _T* target();
- template <typename _T> const _T* target() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _R>
-function<_R()>::function(const function& __f)
-{
- if (__f.__f_ == 0)
- __f_ = 0;
- else if (__f.__f_ == (const __base*)&__f.__buf_)
- {
- __f_ = (__base*)&__buf_;
- __f.__f_->__clone(__f_);
- }
- else
- __f_ = __f.__f_->__clone();
-}
-
-template<class _R>
-template<class _Alloc>
-function<_R()>::function(allocator_arg_t, const _Alloc&, const function& __f)
-{
- if (__f.__f_ == 0)
- __f_ = 0;
- else if (__f.__f_ == (const __base*)&__f.__buf_)
- {
- __f_ = (__base*)&__buf_;
- __f.__f_->__clone(__f_);
- }
- else
- __f_ = __f.__f_->__clone();
-}
-
-template<class _R>
-template <class _F>
-function<_R()>::function(_F __f,
- typename enable_if<!is_integral<_F>::value>::type*)
- : __f_(0)
-{
- if (__not_null(__f))
- {
- typedef __function::__func<_F, allocator<_F>, _R()> _FF;
- if (sizeof(_FF) <= sizeof(__buf_))
- {
- __f_ = (__base*)&__buf_;
- ::new (__f_) _FF(__f);
- }
- else
- {
- typedef allocator<_FF> _A;
- _A __a;
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__base, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) _FF(__f, allocator<_F>(__a));
- __f_ = __hold.release();
- }
- }
-}
-
-template<class _R>
-template <class _F, class _Alloc>
-function<_R()>::function(allocator_arg_t, const _Alloc& __a0, _F __f,
- typename enable_if<!is_integral<_F>::value>::type*)
- : __f_(0)
-{
- typedef allocator_traits<_Alloc> __alloc_traits;
- if (__not_null(__f))
- {
- typedef __function::__func<_F, _Alloc, _R()> _FF;
- if (sizeof(_FF) <= sizeof(__buf_))
- {
- __f_ = (__base*)&__buf_;
- ::new (__f_) _FF(__f);
- }
- else
- {
- typedef typename __alloc_traits::template
-#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
- rebind_alloc<_FF>
-#else
- rebind_alloc<_FF>::other
-#endif
- _A;
- _A __a(__a0);
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__base, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) _FF(__f, _Alloc(__a));
- __f_ = __hold.release();
- }
- }
-}
-
-template<class _R>
-function<_R()>&
-function<_R()>::operator=(const function& __f)
-{
- function(__f).swap(*this);
- return *this;
-}
-
-template<class _R>
-function<_R()>&
-function<_R()>::operator=(nullptr_t)
-{
- if (__f_ == (__base*)&__buf_)
- __f_->destroy();
- else if (__f_)
- __f_->destroy_deallocate();
- __f_ = 0;
-}
-
-template<class _R>
-template <class _F>
-typename enable_if
-<
- !is_integral<_F>::value,
- function<_R()>&
->::type
-function<_R()>::operator=(_F __f)
-{
- function(_STD::move(__f)).swap(*this);
- return *this;
-}
-
-template<class _R>
-function<_R()>::~function()
-{
- if (__f_ == (__base*)&__buf_)
- __f_->destroy();
- else if (__f_)
- __f_->destroy_deallocate();
-}
-
-template<class _R>
-void
-function<_R()>::swap(function& __f)
-{
- if (__f_ == (__base*)&__buf_ && __f.__f_ == (__base*)&__f.__buf_)
- {
- typename aligned_storage<sizeof(__buf_)>::type __tempbuf;
- __base* __t = (__base*)&__tempbuf;
- __f_->__clone(__t);
- __f_->destroy();
- __f_ = 0;
- __f.__f_->__clone((__base*)&__buf_);
- __f.__f_->destroy();
- __f.__f_ = 0;
- __f_ = (__base*)&__buf_;
- __t->__clone((__base*)&__f.__buf_);
- __t->destroy();
- __f.__f_ = (__base*)&__f.__buf_;
- }
- else if (__f_ == (__base*)&__buf_)
- {
- __f_->__clone((__base*)&__f.__buf_);
- __f_->destroy();
- __f_ = __f.__f_;
- __f.__f_ = (__base*)&__f.__buf_;
- }
- else if (__f.__f_ == (__base*)&__f.__buf_)
- {
- __f.__f_->__clone((__base*)&__buf_);
- __f.__f_->destroy();
- __f.__f_ = __f_;
- __f_ = (__base*)&__buf_;
- }
- else
- _STD::swap(__f_, __f.__f_);
-}
-
-template<class _R>
-_R
-function<_R()>::operator()() const
-{
-#ifndef _LIBCPP_NO_EXCEPTIONS
- if (__f_ == 0)
- throw bad_function_call();
-#endif // _LIBCPP_NO_EXCEPTIONS
- return (*__f_)();
-}
-
-#ifndef _LIBCPP_NO_RTTI
-
-template<class _R>
-const std::type_info&
-function<_R()>::target_type() const
-{
- if (__f_ == 0)
- return typeid(void);
- return __f_->target_type();
-}
-
-template<class _R>
-template <typename _T>
-_T*
-function<_R()>::target()
-{
- if (__f_ == 0)
- return (_T*)0;
- return (_T*)__f_->target(typeid(_T));
-}
-
-template<class _R>
-template <typename _T>
-const _T*
-function<_R()>::target() const
-{
- if (__f_ == 0)
- return (const _T*)0;
- return (const _T*)__f_->target(typeid(_T));
-}
-
-#endif // _LIBCPP_NO_RTTI
-
-template<class _R, class _A0>
-class _LIBCPP_VISIBLE function<_R(_A0)>
- : public unary_function<_A0, _R>
-{
- typedef __function::__base<_R(_A0)> __base;
- aligned_storage<3*sizeof(void*)>::type __buf_;
- __base* __f_;
-
- template <class _F>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(const _F&) {return true;}
- template <class _R2, class _B0>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(_R2 (*__p)(_B0)) {return __p;}
- template <class _R2, class _C>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(_R2 (_C::*__p)()) {return __p;}
- template <class _R2, class _C>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(_R2 (_C::*__p)() const) {return __p;}
- template <class _R2, class _C>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(_R2 (_C::*__p)() volatile) {return __p;}
- template <class _R2, class _C>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(_R2 (_C::*__p)() const volatile) {return __p;}
- template <class _R2, class _B0>
- _LIBCPP_INLINE_VISIBILITY
- static bool __not_null(const function<_R(_B0)>& __p) {return __p;}
-public:
- typedef _R result_type;
-
- // 20.7.16.2.1, construct/copy/destroy:
- _LIBCPP_INLINE_VISIBILITY explicit function() : __f_(0) {}
- _LIBCPP_INLINE_VISIBILITY function(nullptr_t) : __f_(0) {}
- function(const function&);
- template<class _F>
- function(_F,
- typename enable_if<!is_integral<_F>::value>::type* = 0);
-
- template<class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- function(allocator_arg_t, const _Alloc&) : __f_(0) {}
- template<class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- function(allocator_arg_t, const _Alloc&, nullptr_t) : __f_(0) {}
- template<class _Alloc>
- function(allocator_arg_t, const _Alloc&, const function&);
- template<class _F, class _Alloc>
- function(allocator_arg_t, const _Alloc& __a, _F __f,
- typename enable_if<!is_integral<_F>::value>::type* = 0);
-
- function& operator=(const function&);
- function& operator=(nullptr_t);
- template<class _F>
- typename enable_if
- <
- !is_integral<_F>::value,
- function&
- >::type
- operator=(_F);
-
- ~function();
-
- // 20.7.16.2.2, function modifiers:
- void swap(function&);
- template<class _F, class _Alloc>
- _LIBCPP_INLINE_VISIBILITY
- void assign(_F __f, const _Alloc& __a)
- {function(allocator_arg, __a, __f).swap(*this);}
-
- // 20.7.16.2.3, function capacity:
- _LIBCPP_INLINE_VISIBILITY operator bool() const {return __f_;}
-
-private:
- // deleted overloads close possible hole in the type system
- template<class _R2, class _B0>
- bool operator==(const function<_R2(_B0)>&) const;// = delete;
- template<class _R2, class _B0>
- bool operator!=(const function<_R2(_B0)>&) const;// = delete;
-public:
- // 20.7.16.2.4, function invocation:
- _R operator()(_A0) const;
-
-#ifndef _LIBCPP_NO_RTTI
- // 20.7.16.2.5, function target access:
- const std::type_info& target_type() const;
- template <typename _T> _T* target();
- template <typename _T> const _T* target() const;
-#endif // _LIBCPP_NO_RTTI
-};
-
-template<class _R, class _A0>
-function<_R(_A0)>::function(const function& __f)
-{
- if (__f.__f_ == 0)
- __f_ = 0;
- else if (__f.__f_ == (const __base*)&__f.__buf_)
- {
- __f_ = (__base*)&__buf_;
- __f.__f_->__clone(__f_);
- }
- else
- __f_ = __f.__f_->__clone();
-}
-
-template<class _R, class _A0>
-template<class _Alloc>
-function<_R(_A0)>::function(allocator_arg_t, const _Alloc&, const function& __f)
-{
- if (__f.__f_ == 0)
- __f_ = 0;
- else if (__f.__f_ == (const __base*)&__f.__buf_)
- {
- __f_ = (__base*)&__buf_;
- __f.__f_->__clone(__f_);
- }
- else
- __f_ = __f.__f_->__clone();
-}
-
-template<class _R, class _A0>
-template <class _F>
-function<_R(_A0)>::function(_F __f,
- typename enable_if<!is_integral<_F>::value>::type*)
- : __f_(0)
-{
- if (__not_null(__f))
- {
- typedef __function::__func<_F, allocator<_F>, _R(_A0)> _FF;
- if (sizeof(_FF) <= sizeof(__buf_))
- {
- __f_ = (__base*)&__buf_;
- ::new (__f_) _FF(__f);
- }
- else
- {
- typedef allocator<_FF> _A;
- _A __a;
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__base, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) _FF(__f, allocator<_F>(__a));
- __f_ = __hold.release();
- }
- }
-}
-
-template<class _R, class _A0>
-template <class _F, class _Alloc>
-function<_R(_A0)>::function(allocator_arg_t, const _Alloc& __a0, _F __f,
- typename enable_if<!is_integral<_F>::value>::type*)
- : __f_(0)
-{
- typedef allocator_traits<_Alloc> __alloc_traits;
- if (__not_null(__f))
- {
- typedef __function::__func<_F, _Alloc, _R(_A0)> _FF;
- if (sizeof(_FF) <= sizeof(__buf_))
- {
- __f_ = (__base*)&__buf_;
- ::new (__f_) _FF(__f);
- }
- else
- {
- typedef typename __alloc_traits::template
-#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES
- rebind_alloc<_FF>
-#else
- rebind_alloc<_FF>::other
-#endif
- _A;
- _A __a(__a0);
- typedef __allocator_destructor<_A> _D;
- unique_ptr<__base, _D> __hold(__a.allocate(1), _D(__a, 1));
- ::new (__hold.get()) _FF(__f, _Alloc(__a));
- __f_ = __hold.release();
- }
- }
-}
-
-template<class _R, class _A0>
-function<_R(_A0)>&
-function<_R(_A0)>::operator=(const function& __f)
-{
- function(__f).swap(*this);
- return *this;
-}
-
-template<class _R, class _A0>
-function<_R(_A0)>&
-function<_R(_A0)>::operator=(nullptr_t)
-{
- if (__f_ == (__base*)&__buf_)
- __f_->destroy();
- else if (__f_)
- __f_->destroy_deallocate();
- __f_ = 0;
-}
-
-template<class _R, class _A0>
-template <class _F>
-typename enable_if
-<
- !is_integral<_F>::value,
- function<_R(_A0)>&
->::type
-func