1. ホーム
  2. c++

[解決済み] std::is_functionはどのように実装されていますか?

2023-04-17 13:12:46

質問

に対する実装はどうなっているのでしょうか? std::is_function ?

template<class T>
struct is_function : std::integral_constant<
    bool,
    !std::is_const<const T>::value && !std::is_reference<T>::value
> {};

から CPPリファレンス )

と思われます。 int は、この定義では関数になります。 何が足りないのでしょうか?

どのように解決するのですか?

それでは、登場する条件を確認してみましょう。

もし const T は const ではありません ( const は関数型には適用されないので、関数はオブジェクトではありません)、そして T は参照ではありません ( const も同じ理由で参照には適用されません)、関数型です。 int (または他の非関数非参照型) に適合しない理由は is_const<const int>::valuetrue .

によると C++17 標準§11.3.5 関数 / 第 7 節 : (強調)

関数宣言子における cv-qualifier-seq の効果は,関数型の上に cv-qualification を追加するのと同じではありません. 関数型の上に cv-qualification を追加するのと同じです。後者の場合 後者の場合、cv-qualifiers は無視されます。[ 注意 関数型 はcv-qualifier-seqを持つ関数型はcv-qualified型ではありません。 cv-qualified関数型は存在しません。 - エンドノート ]。[...]