名前空間
変種
操作

std::source_location::current

From cppreference.com
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
static consteval source_location current() noexcept;
(C++20以降)

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

目次

[編集] パラメータ

(なし)

[編集] 戻り値

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

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)    // values of member refer to the location of the calling function
    {}
    src_rec(int i) : // values of member refer to this location
        dummy(i)
    {}
    src_rec(double)  // values of member refer to this location
    {}
};
 
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) [編集]
English 日本語 中文(简体) 中文(繁體)