相关疑难解决方法(0)

SFINAE和decltype(自动)

如果函数模板返回decltype(auto)(或使用其他类型说明符auto)但返回语句格式不正确,SFINAE会导致吗?return声明是否被认为是函数签名的直接上下文?

N3690草案中的任何内容似乎都不需要这样.默认情况下,我猜SFINAE不适用.

这看起来很不幸,因为你可以编写一个函数来转发给另一个函数,但是当你写一个longhand时,你不能让它的存在以委托为条件.此外,decltype(auto)由于this不能在函数签名中使用,因此无法检查是否存在对等非静态成员函数.然而,这表明存在一个基本问题,因为decltype(auto)它提供了一种在成员签名中将类类型视为完整的路径,而不是.

是否已撰写提案,或者是否已在任何地方对问题进行了正式分析?

在成员签名中将类类型视为完整的能力可能具有其他含义......但这只是另一个问题的素材.

c++ decltype auto c++14

18
推荐指数
1
解决办法
1067
查看次数

std::is_invocable<...> 检查成员函数

以下代码正确确定何时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)

c++ std visual-c++ c++17

3
推荐指数
1
解决办法
3798
查看次数

标签 统计

c++ ×2

auto ×1

c++14 ×1

c++17 ×1

decltype ×1

std ×1

visual-c++ ×1