我可以写一个函数类型返回一个函数

我可以写一个函数类型返回一个函数

本文介绍了我可以写一个函数类型返回一个函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法在gcc和clang上编译以下内容

The following fails to compile on both gcc and clang

#include <type_traits>

int foo();

int main()
{
    using R = std::result_of_t<decltype(foo)()>; // error
}

两个编译器上的错误都涉及到声明函数的非法性返回一个函数。但我不是声明这样的函数 - 我只是想写它的类型,因为这是 result_of 期望。这是真的还是不成形?

The error on both compilers deals with the illegality of declaring a function returning a function. But I'm not declaring such a function - I'm just trying to write its type - since that's what result_of expects. Is this really still ill-formed?

推荐答案

您正在传递 type-id http://eel.is/c++draft/dcl.namerel =nofollow> [dcl.name] 为

You're passing a type-id, which is defined in [dcl.name] as

有某种类型,假设的声明必须在第一位形成良好。但它不是每。因此,程序是不成形的(并且编译器的错误消息实际上是可理解的)。这种情况也更直接地由的有趣讨论)。

(Clang shouldn't be accepting this. C.f. GCC bug 17232's interesting discussion).

这篇关于我可以写一个函数类型返回一个函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 09:47