問題タブ [std-source-location]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
5434 参照

c++ - std::experimental::source_location はどのように実装できますか?

C++ Extensions for Library Fundamentals、バージョン 2 ( N4564 ) では type が導入されていstd::experimental::source_locationます。

§ 14.1.2 [reflection.src_loc.creation] は次のように述べています。

戻り値: postfix-expressionが (括弧で囲まれている可能性がある) id-expression Namingである関数呼び出し (C++14 § 5.2.2) によって呼び出されると、実装定義の値を持つ をcurrent返します。source_location値は、 および と#line同じ方法で (C++14 § 16.4) の影響を受ける必要が__LINE__あり__FILE__ます。他の方法で呼び出された場合、返される値は規定されていません。

備考:ブレースまたはイコール初期化子を使用して非静的データ メンバーを初期化する場合、すべての呼び出しは、currentメンバーを初期化するコンストラクターまたは集約の初期化の場所に対応する必要があります。

[注:デフォルトの引数 (C++14 § 8.3.6) として使用される場合、の値は呼び出しサイトでの呼び出しsource_locationの場所になりcurrentます。—エンドノート]

私の理解が正しければ、この機能はこのように使用されることを意図しています。

期待される出力:

がなければ、例外オブジェクトを適切に初期化するためにおよびマクロを内部的にstd::experimental::source_location使用するヘルパー マクロを使用した可能性があります。THROW_WITH_SOURCE_LOCATION__FILE____LINE__

ライブラリがどのように実装できるのか疑問に思っていましたstd::experimental::source_location。私が要点を完全に見逃していない限り、そうするのは特別なコンパイラ サポートなしでは不可能です。しかし、これを機能させるには、どのような魔法のコンパイラ機能が必要でしょうか? に展開されたトリックに匹敵しstd::initializer_listますか?この機能の実験的な実装はありますか? GCC の SVN ソースを確認しましたが、まだ何も見つかりませんでした。

0 投票する
1 に答える
1937 参照

c++ - std::experimental::source_location のビジュアル スタジオでの実装

の合理的に準拠したバージョンは、、などstd::experimental::source_locationを使用して gcc に実装できます。Visual Studio 2017 には同様の組み込み関数が存在しますか? または、Visual Studio 2017 で実装する方法はありますか?__builtin_FILE()__builtin_LINE()std::experimental::source_location

0 投票する
3 に答える
132 参照

c++ - デフォルトの引数であるマクロを呼び出しサイトで展開することは可能ですか?

この場合の__LINE__マクロは 3 に展開されるため、print 関数は同じ値で 4 回呼び出されます。C++ 11 に存在する機能では6,7,8,9なく、印刷関数が呼び出されるように、呼び出しサイトでこのマクロを展開するようにコンパイラーを説得する方法はありますか?3,3,3,3

私のユースケース:

私のアプリケーションでは、一意の ID を取る複数の関数を提供しています。ID は callsite/location ごとに一意である必要があります (そのため、関数が同じステートメントで 2 回呼び出された場合、同じ ID を受け取る必要があります)。現在、ユーザーはLOCATION次のように呼び出しサイトでマクロを手動で入力する必要があります。

次のように関数ごとにマクロを作成せずに、入力を省略できればもっと便利です。

したがって、デフォルトの引数でうまくいくと思いました。これを達成する方法はありますか?

0 投票する
0 に答える
33 参照

c++ - std::source_location の getter が [[nodiscard]] としてマークされていないのはなぜですか?

によると: https://en.cppreference.com/w/cpp/utility/source_location

ゲッターは [[nodiscard]] としてマークされていません。

これには理由がありますか?戻り値以外に呼び出されたときに効果がありますか?