问题标签 [c++17]
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++ - 在 C++1z 中声明朋友模板类模板会产生错误:'template 的特化类 A' 必须出现在命名空间
我正在使用 boost asio 协程,我想使用新的文件系统 TS (-stdc++fs),所以我升级到 GCC 6-20151025 快照。它工作得很好。但是后来我打开了 -std=c++1z 并且在 boost 的源代码中出现了一个错误。我隔离了错误,这是一个最小的例子:
它使用 -std=c++14 编译良好,但为 -std=c++1z 生成以下错误:
我追踪了源中的错误,并且在 pt.c 中新引入的函数“maybe_new_partial_specialization”中的行为似乎有所不同。特别是在仅在概念 TS处于活动状态时才激活的情况。
在将其报告为错误之前,我想先检查这是否是 Concepts TS/C++1z 中的预期行为。
谢谢你。
编辑:根据下面的答案,事实证明这是一个错误,因此我在这里报告了它。
c++ - std::invoke(C++1z) 是如何工作的?
我从这里看到了上面的实现:
http://en.cppreference.com/w/cpp/utility/functional/invoke
然后我想知道编译器如何匹配所需的确切版本。SFINAE 是否适用于尾随回报类型?
c++ - 为什么这个变量在 C++14 中的 g++ 中没有被推断为 initializer_list?
考虑以下程序:
-std=c++14
即使我使用选项,它也可以在 ideone 上正常编译。在此处查看现场演示。但在 C++14 中,变量i
应该initializer_list
根据this推导出来。
有一个针对 C++1z 的提议,它为大括号初始化实现了新的类型推导规则:
对于直接列表初始化:
对于只有一个元素的花括号初始化列表,自动推导将从该条目中推导出;
对于具有多个元素的支撑初始化列表,自动推导将是不正确的。
[例子:
自动 x1 = { 1, 2 }; // decltype(x1) 是 std::initializer_list
自动 x2 = { 1, 2.0 }; // 错误:无法推断元素类型
自动 x3{ 1, 2 }; // 错误:不是单个元素
自动 x4 = { 3 }; // decltype(x4) 是 std::initializer_list
自动 x5{ 3 }; // decltype(x5) 是 int。
--结束示例]
因此,规则在 C++17 中发生了变化。因此,当我使用-std=c++14
. 这是g ++中的错误吗?不应该像C++14 中i
那样推导出变量吗?initializer_list
c++ - Why is a convenience helper for the erase-remove-idiom not provided by the standard?
Removing items from a collection in the STL requires a technique used so often that is has become an idiom: the erase-remove-idiom
One of the most common usages of this idiom is to remove an item of type T
from a vector<T>
This is obviously very verbose, and violates the DRY principle - the vector in question is required 4 times there.
So my question is why does the standard not provide a convenience helper?
Something like
or
This could obviously be extended to
etc...
c++ - 有哪些 C++1z 公理的例子?
C++1z 应该在语言中引入概念(约束 + 公理)。除了已经提到的那些公理(自反性、交换性、传递性)之外,还有哪些其他公理可能有用?公理是否应该仅用于编译器优化,或者它们也可以用于不同的目的?
c++ - 如何使用带有 lambda 仿函数参数的 requires 子句?
有什么方法可以将一般要求子句应用于 lambda 仿函数的参数?
假设我有两个约束C1
,C2
并且我想检查一个参数。我希望以下内容可以工作,因为函数允许使用类似的语法:
但这不会与 GCC 6 一起编译
c++11 - 获取 Apple clang 版本和对应的上游 LLVM 版本
我想了解我的 macbook 中安装了哪个版本的 clang Apple,以查看可用的 c++11 和/或 c++14 功能。我输入了这个命令:
但我无法理解是什么(clang-700.1.76)
意思。如何将此代码转换为 clang 版本?
这是您可以检查 clang 版本http://clang.llvm.org/cxx_status.html中可用的 c++ 功能的站点
c++ - SFINAE 和重载函数的地址
我正在尝试bar
在另一个函数的参数 ( foo1
/ foo2
) 的上下文中解析重载函数 ( ) 的地址。
没有问题foo1
,它明确指定bar
' 类型。
但是,foo2
通过 SFINAE 禁用除一个版本之外的所有版本的bar
,无法编译并显示以下消息:
据我了解,C++ 不能同时解析重载函数的地址并执行模板参数推导。
是这个原因吗?有没有办法foo2<Baz>(bar);
编译(或类似的东西)?
c++ - 以 :: 开头的 C++ 嵌套命名空间定义
在草案 §7.3.1¶1 (n4527) 中,命名空间定义的语法包含:
封闭命名空间说明符:
标识符
封闭命名空间说明符 :: 标识符
这可以防止命名空间定义具有以“::”开头的标识符
这种限制有什么理由吗?
更新: downvote(s) 和一些答案让我意识到当我在第一句话中的意思是“草稿”时,我写了“标准”。在我的辩护中,我确实在括号中写了文件编号。因此,让我强调这是一个关于 C++1z 的嵌套命名空间定义特性的问题。
c++ - 这段代码怎么会是 constexpr?(标准::计时)
Howard Hinnant 在标准文件 P0092R1 中写道:
这段代码如何工作?问题是operator--
on astd::chrono::duration
不是 constexpr 操作。它被定义为:
然而这段代码可以编译,并在编译时给出正确的答案:
那是怎么回事?