LLVM 20.0.0git
|
This file provides a collection of function (or more generally, callable) type erasure utilities supplementing those provided by the standard library in <function>
.
More...
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/ADT/STLForwardCompat.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/MemAlloc.h"
#include "llvm/Support/type_traits.h"
#include <cstring>
#include <memory>
#include <type_traits>
Go to the source code of this file.
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
namespace | llvm::detail |
These are wrappers over isa* function that allow them to be used in generic algorithms such as llvm:all_of , llvm::none_of , etc. | |
Typedefs | |
template<typename T > | |
using | llvm::detail::EnableIfTrivial = std::enable_if_t< std::is_trivially_move_constructible< T >::value &&std::is_trivially_destructible< T >::value > |
template<typename CallableT , typename ThisT > | |
using | llvm::detail::EnableUnlessSameType = std::enable_if_t<!std::is_same< remove_cvref_t< CallableT >, ThisT >::value > |
template<typename CallableT , typename Ret , typename... Params> | |
using | llvm::detail::EnableIfCallable = std::enable_if_t< std::disjunction< std::is_void< Ret >, std::is_same< decltype(std::declval< CallableT >()(std::declval< Params >()...)), Ret >, std::is_same< const decltype(std::declval< CallableT >()(std::declval< Params >()...)), Ret >, std::is_convertible< decltype(std::declval< CallableT >()(std::declval< Params >()...)), Ret > >::value > |
This file provides a collection of function (or more generally, callable) type erasure utilities supplementing those provided by the standard library in <function>
.
It provides unique_function
, which works like std::function
but supports move-only callable objects and const-qualification.
Future plans:
function
that provides ref-qualified support, which doesn't work with std::function
.Note that LLVM's utilities are greatly simplified by not supporting allocators.
If the standard library ever begins to provide comparable facilities we can consider switching to those.
Definition in file FunctionExtras.h.