最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

class template
<type_traits>

# std::is_nothrow_invocable(C++17)

    namespace std {
      template <class F, class... ArgsTypes>
      struct is_nothrow_invocable;

      template <class F, class... ArgsTypes>
      inline constexpr bool is_nothrow_invocable_v
        = std::is_nothrow_invocable<F, ArgsTypes...>::value;
    }

## 概要

型`F`が、与えられた型の引数`ArgsTypes...`で関数呼び出し可能であり、その呼び出しに際して例外を投げないかどうかを調べる。

## 要件

型`F`および`ArgsTypes...`パラメータパックの全ての型が、完全型であること。もしくは`const`/`volatile`修飾された(あるいはされていない)`void`か、要素数不明の配列型であること。

## 効果

型`F`に対して引数`ArgsTypes...`によるINVOKE要件に従った呼び出しが可能であり、いかなる例外も投げない場合`true_type`から派生し、そうでなければ`false_type`から派生する。

## 例

    #include <type_traits>
    #include <iostream>

    auto f(int) noexcept -> double {
      return 0.0;
    }

    auto g(double) -> double {
      return 0.0;
    }

    int main()
    {
      std::cout << std::boolalpha;

      //f(int) noexcept -> double
      std::cout << std::is_nothrow_invocable<decltype(f), int>::value << std::endl;

      //f(int*) （定義なし）
      std::cout << std::is_nothrow_invocable<decltype(f), int*>::value << std::endl;

      //g(double) -> double
      std::cout << std::is_nothrow_invocable<decltype(g), double>::value << std::endl;
    }

### 出力

    true
    false
    false

## バージョン

### 言語

- C++17

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: 2017 Update 3 ✅

## 参照

- C++1z 関数が呼び出し可能かを判定する型特性 - Faith and Brave - C++で遊ぼう
- Resolving GB 55, US 84, US 85, US 86