std::source_location::current
ja.cppreference.net より
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 <print>
#include <source_location>
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) // 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()
{
return std::source_location::current();
}
int main()
{
const auto r0 = src_rec();
const auto r1 = src_rec(0);
const auto r2 = src_rec(0.0);
const auto s0 = std::source_location::current();
const auto s1 = src_clone(s0);
const auto s2 = src_clone();
const auto s3 = src_make();
std::println("#{1} {0} {2}", "r0", r0.srcl.line(), r0.srcl.function_name());
std::println("#{1} {0} {2}", "r1", r1.srcl.line(), r1.srcl.function_name());
std::println("#{1} {0} {2}", "r2", r2.srcl.line(), r2.srcl.function_name());
std::println("#{1} {0} {2}", "s0", s0.line(), s0.function_name());
std::println("#{1} {0} {2}", "s1", s1.line(), s1.function_name());
std::println("#{1} {0} {2}", "s2", s2.line(), s2.function_name());
std::println("#{1} {0} {2}", "s3", s3.line(), s3.function_name());
}
出力例:
#31 r0 int main()
#13 r1 src_rec::src_rec(int)
#16 r2 src_rec::src_rec(double)
#34 s0 int main()
#34 s1 int main()
#36 s2 int main()
#26 s3 std::source_location src_make()
関連項目
実装定義の値で新しい
source_location
を構築する
(public member function) |
|
|
[static]
|
現在のスタックトレースまたはその指定された部分を取得する
(
std::basic_stacktrace<Allocator>
のpublic static member function)
|