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

履歴 編集

function template
<variant>

# std::operator!=(C++17)

    namespace std {
      template <class... Types>
      constexpr bool operator!=(const variant<Types...>& x, const variant<Types...>& y);
    }

## 概要

`variant`オブジェクトの非等値比較を行う。

## テンプレートパラメータ制約

- 全ての候補型インデックス`I`において、式`get<I>(x) != get<I>(y)`によって返される型が`bool`に変換可能であること

## 戻り値

- `x.index() != y.index()`である場合、`true`が返る
- `x.valueless_by_exception()`が`true`である場合、`false`が返る
- いずれでもない場合 (`x.index() == y.index()`)、そのインデックス値を`I`として、`get<I>(x) != get<I>(y)`の戻り値が返る

## 例

    #include <cassert>
    #include <variant>

    int main()
    {
      std::variant<int, char, double> a = 1;
      std::variant<int, char, double> b = 3.14;
      std::variant<int, char, double> c = 3;

      assert(a != b);    // 保持する型が異なる
      assert(a != c);    // 保持する型が同じだが、値が異なる
      assert(!(a != a)); // 保持する型と値が同じ
      assert(!(b != b)); // 保持する型と値が同じ
    }

### 出力

## バージョン

### 言語

- C++17

### 処理系

- Clang: 4.0.1 ✅
- GCC: 7.2 ✅
- Visual C++: ??

## 参照

- P0393R3 Making Variant Greater Equal