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

履歴 編集

class template
<stacktrace>

# std::stacktrace_entry(C++23)

    namespace std {
      class stacktrace_entry;
    }

## 概要

`stacktrace_entry`は、スタックトレースの各エントリ (行) を表すクラスであり、各エントリの情報を問い合せる操作を提供する。

このクラスは、`regular`および`three_way_comparable<strong_ordering>`のモデルである。

## メンバ関数

### 構築・破棄

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++23
`~stacktrace_entry();` | デストラクタ | C++23
`constexpr stacktrace_entry& operator=(const stacktrace_entry& other) noexcept;` | 代入演算子 | C++23

### 観測

名前 | 説明 | 対応バージョン
--- | --- | ---
`native_handle` | ハンドルを取得する | C++23
`operator bool` | 空でないかを判定する | C++23

### 照会

名前 | 説明 | 対応バージョン
--- | --- | ---
`description` | このオブジェクトを説明する文字列を取得する | C++23
`source_file` | ソースファイル名を取得する | C++23
`source_line` | 行番号を取得する | C++23

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`native_handle_type` | 実装依存のハンドル型 | C++23

## 非メンバ関数

### 入出力

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | 出力ストリームに出力する | C++23

### 文字列への変換

名前 | 説明 | 対応バージョン
--- | --- | ---
`to_string` | 文字列に変換する | C++23

### 比較演算子

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較を行う | C++23
`bool operator!=(const stacktrace_entry&, const stacktrace_entry&) noexcept;` | 非等値比較を行う (`==`により使用可能) | C++23
`friend constexpr strong_ordering operator<=>(const stacktrace_entry& x, const stacktrace_entry& y) noexcept;` | 三方比較を行う | C++23
`strong_ordering operator<(const stacktrace_entry&, const stacktrace_entry&) noexcept;` | 左辺が右辺より小さいかを判定する (`<=>`により使用可能) | C++23
`strong_ordering operator<=(const stacktrace_entry&, const stacktrace_entry&) noexcept;` | 左辺が右辺以下かを判定する (`<=>`により使用可能) | C++23
`strong_ordering operator>(const stacktrace_entry&, const stacktrace_entry&) noexcept;` | 左辺が右辺より大きいかを判定する (`<=>`により使用可能) | C++23
`strong_ordering operator>=(const stacktrace_entry&, const stacktrace_entry&) noexcept;` | 左辺が右辺以上かを判定する (`<=>`により使用可能) | C++23

## ハッシュサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`template <class T> struct hash;` | `hash`クラスの先行宣言 | C++23
`template <>` `struct hash<stacktrace_entry>;` | `hash`クラスの`stacktrace_entry`に対する特殊化 | C++23

## 文字列フォーマットサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`formatter` | `std::formatter`クラスの特殊化 | C++23

## 例

    #include <iostream>
    #include <stacktrace>

    void g() {
      std::stacktrace st = std::stacktrace::current(0, 1);
      std::stacktrace_entry entry = st[0];

      std::cout << entry.description() << std::endl;
      std::cout << entry.source_file() << std::endl;
      std::cout << entry.source_line() << std::endl;
    }

    void f() {
      g();
    }

    int main() {
      f();
    }

### 出力例 (GCC)

    g()
    /app/example.cpp
    5

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: 12 ✅
- Visual C++: ??