39 lines
		
	
	
		
			943 B
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			943 B
		
	
	
	
		
			C++
		
	
	
	
|  | /*!
 | ||
|  | @file | ||
|  | Defines `boost::hana::id`. | ||
|  | 
 | ||
|  | @copyright Louis Dionne 2013-2016 | ||
|  | Distributed under the Boost Software License, Version 1.0. | ||
|  | (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
 | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef BOOST_HANA_FUNCTIONAL_ID_HPP
 | ||
|  | #define BOOST_HANA_FUNCTIONAL_ID_HPP
 | ||
|  | 
 | ||
|  | #include <boost/hana/config.hpp>
 | ||
|  | 
 | ||
|  | 
 | ||
|  | BOOST_HANA_NAMESPACE_BEGIN | ||
|  |     //! @ingroup group-functional
 | ||
|  |     //! The identity function -- returns its argument unchanged.
 | ||
|  |     //!
 | ||
|  |     //! ### Example
 | ||
|  |     //! @include example/functional/id.cpp
 | ||
|  | #ifdef BOOST_HANA_DOXYGEN_INVOKED
 | ||
|  |     constexpr auto id = [](auto&& x) -> decltype(auto) { | ||
|  |         return forwarded(x); | ||
|  |     }; | ||
|  | #else
 | ||
|  |     struct id_t { | ||
|  |         template <typename T> | ||
|  |         constexpr T operator()(T&& t) const { | ||
|  |             return static_cast<T&&>(t); | ||
|  |         } | ||
|  |     }; | ||
|  | 
 | ||
|  |     constexpr id_t id{}; | ||
|  | #endif
 | ||
|  | BOOST_HANA_NAMESPACE_END | ||
|  | 
 | ||
|  | #endif // !BOOST_HANA_FUNCTIONAL_ID_HPP
 |