该程序导致不希望的贪婪解析的死胡同:

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

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



可以使用尾随返回类型来“修复”:
auto ::C::M() -> float4x4
{}

现在一切都好。

因此,我认为在使用heading-return-type声明符语法时,我们不能完全限定类名吗?

最佳答案

您可以使用方括号来消除歧义:

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

尽管我用gcc和clang(均为-pedantic)进行了测试,但我不能真正告诉您什么规则可以使之正常运行,尽管并非没有括号。我更喜欢尾随返回类型。

09-26 23:13