无法在函数定义的 out-of-class 声明符中完全限定 class-name

Impossible to fully qualify class-name in out-of-class declarator of function definition

此程序导致不希望的解析贪婪 dead-end:

struct float4x4 {};
class C
{
    float4x4 M();
};

float4x4 ::C::M()
{
    return float4x4{};
}

:8:1: error: no member named 'C' in 'float4x4'; did you mean simply 'C'?
float4x4 ::C::M()
^~~~~~~~~~~~

可以 'fixed' 使用尾随 return 类型:

auto ::C::M() -> float4x4
{}

现在一切都很好。

所以我认为在使用 heading-return-type 声明符语法时我们不能完全限定 class-name?

你可以用括号来消除歧义:

float4x4 (::C::M)()
{
    return float4x4{};
}

虽然我用 gcc 和 clang(两者都 -pedantic)进行了测试,但我无法真正告诉您是什么规则使它可以,虽然它不是没有括号。我更喜欢尾随 return 类型。