The Gaudi Framework  v28r3 (cc1cf868)
Gaudi::detail2 Namespace Reference

Classes

struct  is_reference_wrapper
 
struct  is_reference_wrapper< std::reference_wrapper< U > >
 

Functions

template<class Base , class T , class Derived , class... Args>
auto INVOKE (T Base::*pmf, Derived &&ref, Args &&...args) noexcept(noexcept((std::forward< Derived >(ref).*pmf)(std::forward< Args >(args)...))) -> std::enable_if_t< std::is_function< T >::value && std::is_base_of< Base, std::decay_t< Derived >>::value, decltype((std::forward< Derived >(ref).*pmf)(std::forward< Args >(args)...))>
 
template<class Base , class T , class RefWrap , class... Args>
auto INVOKE (T Base::*pmf, RefWrap &&ref, Args &&...args) noexcept(noexcept((ref.get().*pmf)(std::forward< Args >(args)...))) -> std::enable_if_t< std::is_function< T >::value && is_reference_wrapper< std::decay_t< RefWrap >>::value, decltype((ref.get().*pmf)(std::forward< Args >(args)...))>
 
template<class Base , class T , class Pointer , class... Args>
auto INVOKE (T Base::*pmf, Pointer &&ptr, Args &&...args) noexcept(noexcept(((*std::forward< Pointer >(ptr)).*pmf)(std::forward< Args >(args)...))) -> std::enable_if_t< std::is_function< T >::value && !is_reference_wrapper< std::decay_t< Pointer >>::value && !std::is_base_of< Base, std::decay_t< Pointer >>::value, decltype(((*std::forward< Pointer >(ptr)).*pmf)(std::forward< Args >(args)...))>
 
template<class Base , class T , class Derived >
auto INVOKE (T Base::*pmd, Derived &&ref) noexcept(noexcept(std::forward< Derived >(ref).*pmd)) -> std::enable_if_t<!std::is_function< T >::value && std::is_base_of< Base, std::decay_t< Derived >>::value, decltype(std::forward< Derived >(ref).*pmd)>
 
template<class Base , class T , class RefWrap >
auto INVOKE (T Base::*pmd, RefWrap &&ref) noexcept(noexcept(ref.get().*pmd)) -> std::enable_if_t<!std::is_function< T >::value && is_reference_wrapper< std::decay_t< RefWrap >>::value, decltype(ref.get().*pmd)>
 
template<class Base , class T , class Pointer >
auto INVOKE (T Base::*pmd, Pointer &&ptr) noexcept(noexcept((*std::forward< Pointer >(ptr)).*pmd)) -> std::enable_if_t<!std::is_function< T >::value && !is_reference_wrapper< std::decay_t< Pointer >>::value && !std::is_base_of< Base, std::decay_t< Pointer >>::value, decltype((*std::forward< Pointer >(ptr)).*pmd)>
 
template<class F , class... Args>
auto INVOKE (F &&f, Args &&...args) noexcept(noexcept(std::forward< F >(f)(std::forward< Args >(args)...))) -> std::enable_if_t<!std::is_member_pointer< std::decay_t< F >>::value, decltype(std::forward< F >(f)(std::forward< Args >(args)...))>
 

Function Documentation

template<class Base , class T , class Derived , class... Args>
auto Gaudi::detail2::INVOKE ( T Base::*  pmf,
Derived &&  ref,
Args &&...  args 
) -> std::enable_if_t<std::is_function<T>::value && std::is_base_of<Base, std::decay_t<Derived>>::value, decltype((std::forward<Derived>(ref).*pmf)(std::forward<Args>(args)...))>
noexcept

Definition at line 16 of file invoke.h.

21  {
22  return (std::forward<Derived>(ref).*pmf)(std::forward<Args>(args)...);
23  }
template<class Base , class T , class RefWrap , class... Args>
auto Gaudi::detail2::INVOKE ( T Base::*  pmf,
RefWrap &&  ref,
Args &&...  args 
) -> std::enable_if_t<std::is_function<T>::value && is_reference_wrapper<std::decay_t<RefWrap>>::value, decltype((ref.get().*pmf)(std::forward<Args>(args)...))>
noexcept

Definition at line 26 of file invoke.h.

32  {
33  return (ref.get().*pmf)(std::forward<Args>(args)...);
34  }
template<class Base , class T , class Pointer , class... Args>
auto Gaudi::detail2::INVOKE ( T Base::*  pmf,
Pointer &&  ptr,
Args &&...  args 
) -> std::enable_if_t<std::is_function<T>::value && !is_reference_wrapper<std::decay_t<Pointer>>::value && !std::is_base_of<Base, std::decay_t<Pointer>>::value, decltype(((*std::forward<Pointer>(ptr)).*pmf)(std::forward<Args>(args)...))>
noexcept

Definition at line 37 of file invoke.h.

43  {
44  return ((*std::forward<Pointer>(ptr)).*pmf)(std::forward<Args>(args)...);
45  }
template<class Base , class T , class Derived >
auto Gaudi::detail2::INVOKE ( T Base::*  pmd,
Derived &&  ref 
) -> std::enable_if_t<!std::is_function<T>::value && std::is_base_of<Base, std::decay_t<Derived>>::value, decltype(std::forward<Derived>(ref).*pmd)>
noexcept

Definition at line 48 of file invoke.h.

53  {
54  return std::forward<Derived>(ref).*pmd;
55  }
template<class Base , class T , class RefWrap >
auto Gaudi::detail2::INVOKE ( T Base::*  pmd,
RefWrap &&  ref 
) -> std::enable_if_t<!std::is_function<T>::value && is_reference_wrapper<std::decay_t<RefWrap>>::value, decltype(ref.get().*pmd)>
noexcept

Definition at line 58 of file invoke.h.

63  {
64  return ref.get().*pmd;
65  }
template<class Base , class T , class Pointer >
auto Gaudi::detail2::INVOKE ( T Base::*  pmd,
Pointer &&  ptr 
) -> std::enable_if_t<!std::is_function<T>::value && !is_reference_wrapper<std::decay_t<Pointer>>::value && !std::is_base_of<Base, std::decay_t<Pointer>>::value, decltype((*std::forward<Pointer>(ptr)).*pmd)>
noexcept

Definition at line 68 of file invoke.h.

74  {
75  return (*std::forward<Pointer>(ptr)).*pmd;
76  }
template<class F , class... Args>
auto Gaudi::detail2::INVOKE ( F &&  f,
Args &&...  args 
) -> std::enable_if_t<!std::is_member_pointer<std::decay_t<F>>::value, decltype(std::forward<F>(f)(std::forward<Args>(args)...))>
noexcept

Definition at line 79 of file invoke.h.

83  {
84  return std::forward<F>(f)(std::forward<Args>(args)...);
85  }