【一人 C++20 Advent Calendar 2019】ソースコードの位置情報を返すライブラリを追加【13日目】

一人 C++20 Advent Calendar 2019 13日目の記事になります。

※まだこの機能を実装しているコンパイラがなかったので概念の説明になります。

ソースコードの位置情報を返すライブラリを追加

ソースコードの位置情報を扱うための <source_location> ライブラリが新しく追加されます。
このライブラリでは std::source_location::current() 関数で『この関数を呼び出した位置情報』を内包した std::source_location クラスのオブジェクトを返します。
これは以下のように利用できます。

#include <source_location>

int
main(){
    std::source_location location = std::source_location::current();

    location.line();             // 行番号
    location.column();           // 列番号
    location.file_name();        // ファイル名
    location.function_name();    // 関数名

    return 0;
}

今までは __LINE____FILE__ などといった定義済みマクロを利用していましたが、まとめて取得することが出来てオブジェクトとして管理する事が出来るのは便利でそうね。
将来的に current() だけではなくて関数ポインタや関数名など指定して位置情報が取得できるとめっちゃ便利そうですねえ。
あと column ってどこを基準とした値になるんですかね。
std::source_location::current() 関数の呼び出し方によっていろいろな位置が考えられそうなので実装依存とかになるのかなあ。

参照