Block-Structured AMR Software Framework
AMReX_TypeTraits.H File Reference
#include <AMReX_Config.H>
#include <AMReX_Extension.H>
#include <vector>
#include <type_traits>

Go to the source code of this file.

Classes

struct  amrex::IsBaseFab< A, Enable >
 
struct  amrex::IsBaseFab< D, std::enable_if_t< std::is_base_of_v< BaseFab< typename D::value_type >, D > > >
 
struct  amrex::IsFabArray< A, Enable >
 
struct  amrex::IsFabArray< D, std::enable_if_t< std::is_base_of_v< FabArray< typename D::FABType::value_type >, D > > >
 
struct  amrex::IsMultiFabLike< M, Enable >
 
struct  amrex::IsMultiFabLike< M, std::enable_if_t< IsFabArray_v< M > &&IsBaseFab_v< typename M::fab_type > > >
 
struct  amrex::HasAtomicAdd< T, Enable >
 
struct  amrex::HasAtomicAdd< int >
 
struct  amrex::HasAtomicAdd< long >
 
struct  amrex::HasAtomicAdd< unsigned int >
 
struct  amrex::HasAtomicAdd< unsigned long long >
 
struct  amrex::HasAtomicAdd< float >
 
struct  amrex::HasAtomicAdd< double >
 
struct  amrex::IsMultiFabIterator< T >
 
struct  amrex::MaybeDeviceRunnable< T, Enable >
 
struct  amrex::MaybeHostDeviceRunnable< T, Enable >
 
struct  amrex::DefinitelyNotHostRunnable< T, Enable >
 
struct  amrex::Same< T, U >
 
struct  amrex::Same< T, U1, Us >
 
struct  amrex::detail::Nonesuch
 
struct  amrex::detail::Detector< Default, AlwaysVoid, Op, Args >
 
struct  amrex::detail::Detector< Default, Void_t< Op< Args... > >, Op, Args... >
 
struct  amrex::IsCallable< T, Args >
 Test if a given type T is callable with arguments of type Args... More...
 
struct  amrex::IsCallableR< R, T, Args >
 Test if a given type T is callable with arguments of type Args... More...
 
struct  amrex::Conjunction<... >
 Logical traits let us combine multiple type requirements in one enable_if_t clause. More...
 
struct  amrex::Conjunction< B1 >
 
struct  amrex::Conjunction< B1, Bn... >
 
struct  amrex::Disjunction<... >
 
struct  amrex::Disjunction< B1 >
 
struct  amrex::Disjunction< B1, Bn... >
 
struct  amrex::detail::IsConvertibleImp< T, U, Enable >
 
struct  amrex::detail::IsConvertibleImp< T, U, std::enable_if_t< is_convertible< T >(U{})> >
 
struct  amrex::IsConvertible< T, Args >
 Test if all the types Args... are automatically convertible to type T. More...
 
struct  amrex::IsStoreAtomic< T, Enable >
 

Namespaces

 amrex
 
 amrex::detail
 

Macros

#define AMREX_IS_TRIVIALLY_COPYABLE(T)   std::is_trivially_copyable_v<T>
 
#define AMREX_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T)   std::is_trivially_default_constructible_v<T>
 

Typedefs

template<bool B, class T = void>
using amrex::EnableIf_t = std::enable_if_t< B, T >
 
template<class... >
using amrex::detail::Void_t = void
 
template<template< class... > class Op, class... Args>
using amrex::IsDetected = typename detail::Detector< detail::Nonesuch, void, Op, Args... >::value_t
 
template<template< class... > class Op, class... Args>
using amrex::Detected_t = typename detail::Detector< detail::Nonesuch, void, Op, Args... >::type
 
template<class Default , template< class... > class Op, class... Args>
using amrex::DetectedOr = typename detail::Detector< Default, void, Op, Args... >::type
 
template<class Expected , template< typename... > class Op, class... Args>
using amrex::IsDetectedExact = std::is_same< Expected, Detected_t< Op, Args... > >
 
template<typename T , typename... Args>
using amrex::detail::call_result_t = decltype(std::declval< T >()(std::declval< Args >()...))
 
template<class B >
using amrex::Negation = std::integral_constant< bool, !bool(B::value)>
 

Functions

template<typename T >
constexpr bool amrex::detail::is_convertible (T)
 

Variables

template<class A >
constexpr bool amrex::IsBaseFab_v = IsBaseFab<A>::value
 
template<class A >
constexpr bool amrex::IsFabArray_v = IsFabArray<A>::value
 
template<class M >
constexpr bool amrex::IsMultiFabLike_v = IsMultiFabLike<M>::value
 
template<typename T , typename... Args>
constexpr bool amrex::IsConvertible_v = IsConvertible<T, Args...>::value
 

Macro Definition Documentation

◆ AMREX_IS_TRIVIALLY_COPYABLE

#define AMREX_IS_TRIVIALLY_COPYABLE (   T)    std::is_trivially_copyable_v<T>

◆ AMREX_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE

#define AMREX_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE (   T)    std::is_trivially_default_constructible_v<T>