close
名前空間
変種

std::source_location::current

提供: cppreference.com
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
 
<tbody> </tbody>
static consteval source_location current() noexcept;
(C++20以上)

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

引数

(なし)

戻り値

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;

    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 main
12 src_rec
15 src_rec
34 main
34 main
36 main
25 src_make

関連項目

処理系定義の値を持つ新しい source_location を構築します
(パブリックメンバ関数) [edit]