如果函数模板返回decltype(auto)(或使用其他类型说明符auto)但返回语句格式不正确,SFINAE会导致吗?return声明是否被认为是函数签名的直接上下文?
N3690草案中的任何内容似乎都不需要这样.默认情况下,我猜SFINAE不适用.
这看起来很不幸,因为你可以编写一个函数来转发给另一个函数,但是当你写一个longhand时,你不能让它的存在以委托为条件.此外,decltype(auto)由于this不能在函数签名中使用,因此无法检查是否存在对等非静态成员函数.然而,这表明存在一个基本问题,因为decltype(auto)它提供了一种在成员签名中将类类型视为完整的路径,而不是.
是否已撰写提案,或者是否已在任何地方对问题进行了正式分析?
在成员签名中将类类型视为完整的能力可能具有其他含义......但这只是另一个问题的素材.
以下代码正确确定何时Writer( t )可以调用给定的T.
template <typename T>
inline void Process( const T& t )
{
if constexpr ( std::is_invocable<decltype(Writer), const T&>::value )
{
Writer( t );
}
else { //... }
}
Run Code Online (Sandbox Code Playgroud)
但我只能让它operator()在 Writer 中定义为例如
class Writer
{
public:
operator()( const int& )
{
\\...
}
}
Run Code Online (Sandbox Code Playgroud)
如何对成员函数进行相同的检查,即检查该函数是否存在,例如Write(...)in
class Writer
{
public:
inline void Write( const int& t )
{
}
};
class Archive
{
public:
template <typename T>
inline void …Run Code Online (Sandbox Code Playgroud)