问题标签 [trailing-return-type]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
204 浏览

c++ - 尾随返回类型的名称查找和类型简化规则是什么?

尾随返回类型允许在这两种情况下简化代码:

  1. 从类的成员函数之一返回类内部定义的类型:

    /li>
  2. 返回一个复杂的类型,比如函数指针类型:

    /li>

我试图找到标准的相关部分来解释上述两个简化是如何工作的。我已经查看[basic.lookup]并搜索了trailing-return,但找不到任何直接解释上述转换如何工作的内容。

我错过了吗?

标准的哪些部分解释了上述尾随返回类型的简化?

0 投票
2 回答
136 浏览

c++ - c++ 11 带有 decltype 的尾随返回类型不能按预期工作

为什么这“按预期”工作?我的理解是这不应该工作:

我尝试了其他一些组合,例如:

这样它不会编译错误实际上第二个组合失败了

这是预期的。我的理解是,第一个函数也应该失败并出现同样的错误,但它工作正常。

0 投票
0 回答
47 浏览

c++11 - 不正确的尾随返回类型

我已经有一个可以在 C++ 14 上正常工作的代码,但现在我需要将我的编译器设置设置为 C++ 11。

所以,我做了以下更改

添加了尾随返回类型 bool .. 但我收到错误之类的错误:无法将 '{anonymous}::LookupPredicate(const string&)::' 转换为 'bool' 作为回报 知道什么必须是尾随类型

0 投票
1 回答
78 浏览

c++11 - C++11:在尾随返回类型中正确扩展模板参数包

我试图在我的 C++11 程序中使用switch语句将运行时常量转换为编译时常量。我有enum SomeEnum {A, B, C};,根据它的值我想调用模板函数f<A>()f<B>()或者f<C>()。我的代码中有很多依赖于SomeEnum(以及其他模板参数)的模板函数,所以我决定制作专用dispatch函数。这是我要编译的代码:

(函数返回类型取决于模板参数的情况我不需要处理)

编译该行时出现错误dispatch<TemplateFunctor1>(B, 0);,其中仅需要一个模板参数TemplateFunctor1。错误消息如下:

error: no matching function for call to 'dispatch(SomeEnum, int)'

note: candidate: template<template<SomeEnum <anonymous>, class ...> class FUNCTOR, class ... OTHERS, class ... ARGS> decltype (FUNCTOR<(SomeEnum)0u, OTHERS ...>::function((forward<ARGS>)(dispatch::args)...)) dispatch(SomeEnum, ARGS&& ...)

note: template argument deduction/substitution failed

error: wrong number of template arguments (2, should be 1)在这部分代码FUNCTOR<A, OTHERS...>中:尾随返回类型。

所以我尝试将FUNCTOR<A, OTHERS...>尾随返回类型更改为FUNCTOR<A>,然后dispatch<TemplateFunctor2, int>(B, 0);无法编译该行。它说我提供了错误数量的模板参数(1,应该是 2),这是一个相当预期的错误。

我在这里不明白的是为什么相同的decltype()构造在defaultswitch 分支中有效,但在尾随返回类型中无效?

我可以通过将标准更改为 C++14 并完全删除尾随返回类型来修复我的代码,但是我不明白这里发生了什么。

我还尝试了不同的编译器(ICC、GCC、Clang),它们都给出了类似的错误消息,所以这里不可能是编译器错误。

0 投票
4 回答
107 浏览

c++ - 函数声明中箭头语法的优点

使用有什么好处

超过

在模板实例化期间它不是编译成适当的类型吗?

0 投票
2 回答
24 浏览

c++ - 如何建立使用模板函数的 lambda 函数的尾随返回类型?

如何在以下使用模板函数的代码片段中进行尾随返回类型推导?代码和现在一样运行良好,但我需要知道是否还可以为 lambda 函数添​​加尾随返回。

0 投票
1 回答
249 浏览

c++ - 抽象类型可以用作纯虚函数的返回类型吗?

如果我理解正确,抽象类型不能用作纯虚函数的返回类型。但是,如果使用尾随返回类型,则 gcc(但不是 clang)接受以下代码:

演示

这是一个 gcc 错误,还是该语言不需要为此代码发布诊断?

0 投票
3 回答
193 浏览

c++ - 非模板函数中的尾随返回类型

我见过人们使用以下语法来实现功能:

代替:

我都了解,而且我知道尾随返回类型语法对于使用 decltype 的模板代码很有用。就我个人而言,我会避免使用其他代码的语法,因为在阅读代码时,我更喜欢首先阅读函数的具体返回类型,而不是最后。

如上所示,对非模板代码使用尾随返回类型语法有什么好处(个人偏好或风格除外)?

0 投票
0 回答
38 浏览

c++ - 用于在尾随返回类型中别名模板化结构变量的 Visual C++ 错误 (?)

我有一些在 Clang 上编译但被 Visual C++ 拒绝的代码。我设法将其分解为以下示例:

似乎最后一行中的尾随返回类型应该是引用Struct::BoolValue而不是 ::BoolValue。它适用于 Clang,但被 Visual C++ 2019(最新版本)拒绝:

我怀疑这是一个编译器错误,但我想先检查一下:这段代码有效吗?

0 投票
2 回答
58 浏览

c++ - Koenig 查找的尾随返回类型和回退

大多数情况下,简单成员函数的 C++17 推断返回类型可以轻松转换为 C++11 尾随返回类型。

例如,成员函数在

变成

考虑到using namespace在类主体内的顶级范围内不允许这样做,您如何为以下内容编写尾随返回类型?

(例如,在调用std::swap, std::begin,时使用带有回退的参数相关查找非常常见std::end