このプログラムは、望ましくない解析の貪欲な行き止まりをもたらします。
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
:8:1:エラー:「float4x4」に「C」という名前のメンバーがありません。単に「C」という意味ですか?
float4x4 :: C :: M()
^ ~~~~~~~~~~~
これは、末尾の戻り値の型を使用して「修正」できます。
auto ::C::M() -> float4x4
{}
今はすべて良い。
それで、heading-return-type宣言子構文を使用するときにクラス名を完全に修飾できないと思いますか?
@Someprogrammerdudeうん、これを確認してくださいgodbolt.org/z/mt6GHD
—
v.oddou
::C
一部は他のいくつかの問題の回避策のように見えます。それ以外の場合は、単純にC
(コンパイラーが示唆するように)
@rustyxこれは、この位置で非常に複雑な「最小修飾名を見つける」ことを実行したくないトランスパイラーによるコードの機械的な再放出です。FQ名を発行すると、ルックアップが完全にバイパスされ、そのようなツールに便利です。
—
v.oddou
::
他に方法はないと思います。