Namespaces
Variants

std::experimental:: invocation_type, std::experimental:: raw_invocation_type

From cppreference.net
ヘッダーで定義 <experimental/type_traits>
template < class >

struct raw_invocation_type ; //未定義

template < class Fn, class ... ArgTypes >

struct raw_invocation_type < Fn ( ArgTypes... ) > ;
(1) (ライブラリ基盤 TS)
template < class >

struct invocation_type ; //未定義

template < class Fn, class ... ArgTypes >

struct invocation_type < Fn ( ArgTypes... ) > ;
(2) (ライブラリ基盤 TS)

Fn が引数 ArgTypes... で呼び出されたときの 呼び出しパラメータ を計算します。具体的には INVOKE ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) のようにして、ここで INVOKE Callable で定義された操作です。

INVOKE ( f, t1, t2, ..., tN ) 呼び出しパラメータ は以下のように定義されます。ここで T1 t1 の(CV修飾される可能性のある)型、 U1 t1 が左辺値の場合は T1& 、それ以外の場合は T1&& です:

  • f がクラス T のメンバ関数へのポインタである場合、呼び出しパラメータは U1 に続き、 f のパラメータが t2, ..., tN と対応します。
  • N == 1 かつ f がクラス T のメンバデータへのポインタである場合、呼び出しパラメータは U1 です。
  • f がクラス型のオブジェクトである場合、呼び出しパラメータは、 f の関数呼び出し演算子および代理呼び出し関数の中で、引数 t1, ..., tN に対する最適な実行可能関数のパラメータと t1, ..., tN が対応するものとなります。
  • その他のすべての場合、呼び出しパラメータは f のパラメータが t1, ..., tN と対応するものとなります。

引数 tI が関数のパラメータリスト内の省略記号にマッチする場合、対応する呼び出しパラメータは tI にデフォルト引数プロモーションを適用した結果となります。

Fn および ArgTypes 内のすべての型は、完全型、未知の境界を持つ配列、または(可能性としてcv修飾された) void のいずれかになります。

目次

メンバー型

メンバー型 定義
raw_invocation_type < Fn ( ArgTypes... ) > :: type R ( T1, T2, ... ) 。ただし:

Fn が未評価コンテキストで引数 ArgTypes... で呼び出せる場合にのみ定義される。

invocation_type < Fn ( ArgTypes... ) > :: type R ( U1, U2, ... ) 。ただし:
  • R std:: result_of_t < Fn ( ArgTypes... ) > である。
  • T1, T2, ... は、上記で定義された INVOKE ( std:: declval < Fn > ( ) , std:: declval < ArgTypes > ( ) ... ) 呼び出しパラメータ である。
  • A1, A2, ... ArgTypes... を表す。
  • Ui は、 std:: declval < Ai > ( ) が右辺値の場合は std:: decay_t < Ai > であり、それ以外の場合は Ti である。

Fn が未評価コンテキストで引数 ArgTypes... で呼び出せる場合にのみ定義される。

ヘルパー型

template < class T >
using raw_invocation_type_t = typename raw_invocation_type < T > :: type ;
(ライブラリファンダメンタルTS)
template < class T >
using invocation_type_t = typename invocation_type < T > :: type ;
(ライブラリファンダメンタルTS)

関連項目

C++ documentation for Reflection TS
日本語訳:
C++ documentation for Reflection TS
翻訳結果: - "C++ documentation" はC++専門用語のため翻訳せず - "Reflection TS" はC++専門用語(Technical Specification)のため翻訳せず - HTMLタグ、属性、構造は完全に保持 - フォーマットは元のまま維持