问题标签 [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.
c++ - 推断类型类方法的参数(由 const 限定符重载)失败,在 gcc 中出现尾随返回类型,但在 clang 中没有
没有什么比旧的好的 MCVE 更清晰的了:
这在 g++(4.9.2 和 5.1.0)中失败。但是,如果使用旧的返回类型:
有用。
在 clang (3.5.0) 上,两种变体都有效。
我知道在推断返回类型及其范围时尾随返回类型会发生变化,因此我不会很快将其转换为 gcc 错误。那么标准是怎么说的呢?哪个编译器是对的?
我认为错误中最重要的信息是
无法推断模板参数'R'`
g++ 完整信息:
c++11 - 成员函数中的尾随返回类型
我正在尝试学习尾随返回类型的概念以及使用标记调度在成员函数重载中使用它的可能性。我写的一个玩具实现如下:
这只是一个玩具示例,因为它不是有用的代码。我知道我声明公共访问功能的方式有误。但是,我试图弄清楚它是什么,并理解为什么编译器会抛出以下错误。
c++ - C++11 在特定情况下避免冗余返回类型
好的,谢谢所有看过这个的人。我已经重新创建了确切的场景以便在下面的链接中轻松查看,因此我将注释掉我所拥有的原始文本,因为它并不清楚。 http://cpp.sh/5lp4l
在评论部分我显示调用 make_some(32, std::string{"hi"}) 而不指定调用的数据类型声明。我意识到这似乎很疯狂,并且远远超出了我的预期用例,根据参数自动推断复合类型(推断我想要的数据,基于 int/string)不是必需的,或者是一个好主意。
c++ - 如何将 Ctags 与 C++ 尾随返回类型一起使用
我开始喜欢C++11 style
尾随返回类型,但是当我想vim
与我的 C++ 程序一起使用时,我注意到 ctags 不能很好地与它们混合。
我已经尝试过旺盛的 ctags和通用 ctags,但两者似乎都不适用于尾随返回类型。
有没有办法配置ctags
与尾随返回类型合作?
c++ - 尾随返回类型中的名称查找问题
以下示例说明了我的问题:
我不想导入std::to_string
全局命名空间,也不想使用-> decltype(std::to_string(x))
,因为这样做会禁用 ADL。显然,您不能using std::to_string
放入decltype
. 那么,我该怎么做呢?
c++11 - 编译时访问具有枚举值的元组项
我想使用枚举值作为索引来访问元组项。我已阅读这篇文章以提供帮助。
我在 VS2013 中工作,因此如果auto
没有trailing return
.
静态转换工作,但它很麻烦,而且它要求元组可以自由访问(在实际代码中,属性在protected
范围内)。
我想通过使用模板化方法来改进这一点GetAttribute
。
我试过了,但它产生了一个错误:
prog.cpp:30:119: 错误: '' 和 'size_t {aka unsigned int}' 类型的无效操作数到二进制 'operator<' auto GetAttribute(AttributeName attributeName) -> decltype(std::declval(std::get (attributeName)>(attributes))) ^ prog.cpp:30:119: 错误:''和'size_t {aka unsigned int}'类型的无效操作数到二进制'operator<' prog.cpp:在函数'int main ()': prog.cpp:57:4: 错误: 'struct X' 没有名为 'GetAttribute' 的成员 x.GetAttribute(XParameters::PARAMETER1); // 不编译。^
c++ - 尾随返回类型和标签调度
尝试使用尾随返回类型和标签调度,我编写了以下代码。
当我使用 Apple LLVM 版本 7.0.2 (clang-700.1.81) 编译此代码时,出现以下编译错误
奇怪的是,当我取消注释分配和访问 param2 的代码(在上面的代码中注释掉)时,它编译得很好并产生了所需的结果。
我究竟做错了什么?谁能向我解释为什么在编译行为中包含 param2 更改?
c++11 - 使用 CRTP 时的尾随返回类型使用情况
以下是我编写的用于试验 CRTP 设置中的尾随返回类型的模型代码。
我需要一些帮助来破译 CrtpB 中 func1 的尾随返回类型。
我试过使用
但这不起作用。我还尝试根据Inferring return type of templated member functions in CRTP中找到的解决方案编写帮助函数。
但这也不起作用。
c++ - 组合 std::forward、std::move 和 volatile 时出现意外的返回类型
gcc.godbolt.org上的代码。
我创建了一个简单的类型特征来删除右值引用:
我用它来实现一个copy_if_rvalue(x)
函数,它的返回类型取决于传递的参数:
为了确保函数返回正确的类型,我编写了一些简单的静态断言:
以上所有静态断言都编译成功。但是,当尝试std::move
使用volatile int
变量时,会发生一些意想不到的事情:
断言 (0) 失败 -volatile
不传播,如断言 (1) 所示。
但是,断言 (2) 通过了,即使我认为它应该等同于断言 (0),因为copy_if_rvalue
的返回类型与 (2) 的第一种类型完全相同:
似乎volatile
仅在std::move
使用时才传播,并且仅通过copy_if_rvalue
模板函数传播。
这里发生了什么?
c++ - 这种尾随返回类型在 C++11 中是否合法?
以下:
在 C++11 模式下给出一个错误,Clang 说:
错误:“自动”返回没有尾随返回类型;推导的返回类型是 C++14 扩展
但在 C++14 模式下编译。GCC 在使用-Wall -Wextra -pedantic
.
n3337 7.1.6.4/2 说:
在此类声明符有效的任何上下文中,自动类型说明符可能与带有尾随返回类型(8.3.5)的函数声明符一起出现。
8.3.5p2 讨论了函数声明符,但我太缺乏经验,无法弄清楚。谁能解释它在 C++11 中是否合法?