Namespaces
Variants

std::source_location:: current

From cppreference.net
Utilities library
static consteval source_location current ( ) noexcept ;
(C++20以降)

呼び出し元の位置に対応する新しい source_location オブジェクトを構築します。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Parameters, Return value, Notes, Example, See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、ID、リンク先は一切変更していません - 数値や書式設定は完全に保持されています

パラメータ

(なし)

戻り値

current() が直接( current() を名指しする関数呼び出しによって)呼び出された場合、呼び出し元の位置を表す実装定義の値を持つ source_location オブジェクトを返します。これらの値は、事前定義マクロ __LINE__ および __FILE__ と同様に、 #line プリプロセッサディレクティブ の影響を受けるものとします。

current() デフォルトメンバ初期化子 で使用された場合、戻り値はデータメンバを初期化するコンストラクタ定義または 集成体初期化 の位置に対応します。

current() がデフォルト引数で使用される場合、戻り値は呼び出しサイトにおける current() の呼び出し位置に対応します。

current() が他の方法で呼び出された場合、戻り値は未規定です。

注記

std::source_location::current は通常、コンパイラの組み込み実装を必要とします。

#include <source_location>
#include <iostream>
struct src_rec {
    std::source_location srcl = std::source_location::current();
    int dummy = 0;
    src_rec(std::source_location loc = std::source_location::current()) :
        srcl(loc)    // メンバーの値は呼び出し元関数の位置を参照
    {}
    src_rec(int i) : // メンバーの値はこの位置を参照
        dummy(i)
    {}
    src_rec(double)  // メンバーの値はこの位置を参照
    {}
};
std::source_location src_clone(std::source_location a = std::source_location::current())
{
    return a;
}
std::source_location src_make()
{
    std::source_location b = std::source_location::current();
    return b;
}
int main()
{
    src_rec srec0;
    src_rec srec1(0);
    src_rec srec2(0.0);
    auto s0 = std::source_location::current();
    auto s1 = src_clone(s0);
    auto s2 = src_clone();
    auto s3 = src_make();
    std::cout
        << srec0.srcl.line() << ' ' << srec0.srcl.function_name() << '\n'
        << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n'
        << srec2.srcl.line() << ' ' << srec2.srcl.function_name() << '\n'
        << s0.line() << ' ' << s0.function_name() << '\n'
        << s1.line() << ' ' << s1.function_name() << '\n'
        << s2.line() << ' ' << s2.function_name() << '\n'
        << s3.line() << ' ' << s3.function_name() << '\n';
}

出力例:

31 int main()
12 src_rec::src_rec(int)
15 src_rec::src_rec(double)
34 int main()
34 int main()
36 int main()
25 std::source_location src_make()

関連項目

実装定義の値で新しい source_location を構築する
(public member function)
[static]
現在のスタックトレースまたはその指定された部分を取得する
( std::basic_stacktrace<Allocator> のpublic static member function)