libstdc++: Detection idiom (original) (raw)

#define __cpp_lib_experimental_detect
template<typename... >
using std::experimental::void_t = void
template<typename _Default , template< typename... > class _Op, typename... _Args>
using std::experimental::detected_or = std::__detected_or< _Default, _Op, _Args... >
template<typename _Default , template< typename... > class _Op, typename... _Args>
using std::experimental::detected_or_t = typename detected_or< _Default, _Op, _Args... >::type
template<template< typename... > class _Op, typename... _Args>
using std::experimental::detected_t = detected_or_t< nonesuch, _Op, _Args... >
template<template< typename... > class _Op, typename... _Args>
using std::experimental::is_detected = typename detected_or< void, _Op, _Args... >::__is_detected
template<typename _Expected , template< typename... > class _Op, typename... _Args>
using std::experimental::is_detected_exact = is_same< _Expected, detected_t< _Op, _Args... > >
template<typename _To , template< typename... > class _Op, typename... _Args>
using std::experimental::is_detected_convertible = is_convertible< detected_t< _Op, _Args... >, _To >
template<template< typename... > class _Op, typename... _Args>
constexpr bool std::experimental::is_detected_v
template<typename _Expected , template< typename... > class _Op, typename... _Args>
constexpr bool std::experimental::is_detected_exact_v
template<typename _To , template< typename... > class _Op, typename... _Args>
constexpr bool std::experimental::is_detected_convertible_v

Since

Library Fundamentals TS v2. C++14.

__cpp_lib_experimental_detect

#define __cpp_lib_experimental_detect

detected_or

template<typename _Default , template< typename... > class _Op, typename... _Args>

detected_or_t

template<typename _Default , template< typename... > class _Op, typename... _Args>

detected_t

template<template< typename... > class _Op, typename... _Args>

is_detected

template<template< typename... > class _Op, typename... _Args>

is_detected_convertible

template<typename _To , template< typename... > class _Op, typename... _Args>

is_detected_exact

template<typename _Expected , template< typename... > class _Op, typename... _Args>

void_t

is_detected_convertible_v

template<typename _To , template< typename... > class _Op, typename... _Args>

constexpr bool std::experimental::fundamentals_v2::is_detected_convertible_v constexpr

is_detected_exact_v

template<typename _Expected , template< typename... > class _Op, typename... _Args>

constexpr bool std::experimental::fundamentals_v2::is_detected_exact_v constexpr

is_detected_v

template<template< typename... > class _Op, typename... _Args>

constexpr bool std::experimental::fundamentals_v2::is_detected_v constexpr