【发布时间】:2013-07-10 15:00:57
【问题描述】:
如果函数模板返回decltype(auto)(或使用auto 的其他类型说明符)但返回语句格式不正确,SFINAE 会产生结果吗? return 语句是否被认为是函数签名的直接上下文?
N3690 草案中似乎没有任何要求。默认情况下,我猜 SFINAE 不适用。
这似乎很不幸,因为您可以编写一个函数来转发到另一个函数,但是您不能像以手写方式编写时那样使其存在以委托为条件。此外,如果没有decltype(auto),就无法检查对等非静态成员函数的存在,因为this 不能在函数签名中使用。然而,这表明存在一个基本问题,因为decltype(auto) 提供了一条路径,可以在成员签名中将类类型视为完整,而事实并非如此。
有没有写过提案,或者有没有在任何地方正式分析过问题?
在成员签名中将类类型视为完整的能力可能具有其他含义……但这只是另一个问题的素材。
【问题讨论】:
-
我一直想知道这一点。可悲的是,我也懒得遵循 1y 的建议......
-
@MarkGarcia 是的,这是给定的。我只是在问题的末尾添加了一条注释;非模板成员仍有可能打开通往暮光区的虫洞。
-
如果问题中有一些例子,对于像我这样的笨蛋来说会更容易理解。 :)
-
一个小例子会让问题更清楚。也许还有其他方法可以实现您想要的。
-
@n.m.总是有更多的方法。我没有被卡住,但我试图避免 8 次重复过载。我正在寻找的答案是指向提案文件的指针,因此我可以判断是否要自己写报告。