1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*
- * Copyright Andrey Semashev 2024.
- * 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)
- */
- /*!
- * \file functor.hpp
- * \author Andrey Semashev
- * \date 2024-01-23
- *
- * This header contains a \c functor implementation. This is a function object
- * that invokes a function that is specified as its template parameter.
- */
- #ifndef BOOST_CORE_FUNCTOR_HPP
- #define BOOST_CORE_FUNCTOR_HPP
- namespace boost::core {
- // Block unintended ADL
- namespace functor_ns {
- //! A function object that invokes a function specified as its template parameter
- template< auto Function >
- struct functor
- {
- template< typename... Args >
- auto operator() (Args&&... args) const noexcept(noexcept(Function(static_cast< Args&& >(args)...))) -> decltype(Function(static_cast< Args&& >(args)...))
- {
- return Function(static_cast< Args&& >(args)...);
- }
- };
- } // namespace functor_ns
- using functor_ns::functor;
- } // namespace boost::core
- #endif // BOOST_CORE_FUNCTOR_HPP
|