c++20相关内容
谁能给我解释一下iterator.concepts.general#1中的这一行在C++标准草案中是什么意思: 对于类型I,ITER_TRAITS(I)表示I如果iterator_traits命名从主模板生成的专门化。否则,ITER_TRAITS(I)表示iterator_traits。 推荐答案 主iterator_traits模板将从I的对应成员中填
..
我正在努力更多地了解C++20的std::ranges实现,我遇到了一个看似简单的问题,如果不滚动我自己的实现,我就找不到标准的解决方案。 问题很简单:我只想使用C++20范围适配器访问和处理范围中每N个元素的和。例如,我正在寻找一个实用程序,该实用程序具有以下内容: for (auto x : std::ranges::iota_view{0, 10} | std::ranges::
..
请考虑结构A具有u类型的U和默认初始值设定项。析构函数~U仅声明为: template struct U { ~U(); }; struct R; struct A { U u = U{}; }; 所有编译器都接受此代码,demo:https://gcc.godbolt.org/z/oqMjTovMo 但如果我们按
..
我正在编写一些必须处理NTP时间的代码。我决定用std::chrono::duration来表示它们,我希望这会让我的时间数学更容易做。 NTP时间由无符号64位整数表示,从纪元开始的秒数在高32位,小数秒在低32位。划时代的日期是1900年1月1日,但这是一个与我在这里处理的问题不同的问题,我已经知道如何处理它。对于我正在使用的示例,假设纪元为1970年1月1日,以使计算更简单。 持续时
..
假设我正在编写一个类模板,其某些成员受类型模板参数静态常量数据成员的存在和值的约束: template struct A { constexpr bool operator()() requires T::value { return T::value; } constexpr bool operator()() { return false; } }; #
..
我正在尝试制作一些模板版本的consteval函数,我不清楚这里是否有任何限制。 template consteval T max(const T& a, const T& b) { return (a > b) ? a : b; } template consteval T mid(const T& a, const T& b,
..
在下面的C++20程序中,我错误地在B{{{{A{}}}}}中额外放了一对花括号{}: #include struct A { A() { std::cout
..
当派生类使用基类构造函数时,演绎似乎总是fail。然而,当基类有许多构造函数时,重新定义所有构造函数是非常笨拙的。当基类使用新的构造函数快速演变时,这也是一件痛苦的事情。这个老问题是在两年多前提出的,所以我想知道:到2020年,当c++17和c++2a可用时,有什么办法可以解决这个问题吗? template class base_t { public:
..
在以下代码中,使用大括号类型不同的两种形式使用模板参数演绎对A对象进行了初始化: template struct A{ T x; }; int main() { static_assert( A{1}.x == 1 ); //#1: ok in GCC and MSVC static_assert( A(1).x == 1 ); //#2: o
..
我正在处理C++20的最后四大特性,试图学习新的主要特性。 试着从网络上下载一些与范围相关的代码,我写道: std::vector ints{ 6, 5, 2, 8 }; auto even = [](int i) { return 0 == i % 2; }; // ranges... auto rr = ints | std::views::filter(even)
..
Range即将使用C++20标准版本。 我的问题是:我们是否能够构建具有任何范围的(现有)标准库容器?更重要的是,使用范围视图? 例如,这是否会: #include #include #include int main() { auto sq = [](int x) { return x * x; }; st
..
我目前正在使用GCC 10.1.0尝试名为模块的C++20的新功能,如here所述,然而,如果我尝试构建以下代码片段,编译器会抛出一堆错误。 这是我到目前为止写的代码片段: // helloworld.cpp export module helloworld; // module declaration import ; // import dec
..
我想在C++20中创建一个广泛的constexpr数据存储库。数以万计的本机C++对象作为&q;文本段&即请求分页加载到进程中并在实例之间共享(生成代码)。 对象相互引用,需要通过各种属性、交叉引用等进行索引,所有这些都希望在编译时完成。这需要constexpr(关联)容器,但不能使用模板化(按大小、散列大小等)完成。容器,因为一切都需要保持多态。 首先这似乎是不可能的,因为C++20
..
我试图使用C++20概念创建一个静态接口,下面的代码似乎可以完成这项工作: template concept FooConcept = requires { static_cast(&FOO::operator()); static_cast(&FOO::operator
..
目前我有一个项目需要C++17,因此在CMakeLists.txt中我很早就有这样一行: set(CMAKE_CXX_STANDARD 17) 从命令行(cmake),偶尔我想测试一下该项目是否也可以用C++20编译。(以避免意外)。 如何选择从命令行使用C++20编译? 如果我这样做cmake -DCMAKE_CXX_STANDARD=20,则它稍后会被配置覆盖,而不是17
..
我正在尝试将clang10与mingw-w64的libstdc++一起使用,因为MSVC头文件不支持clang 10。我不介意没有标准库的新部分,我只想使用新的语言功能。 我安装了用于x86_64的mingw-w64 8.1.0版,并安装了POSIX线程和SEH异常,并使用以下命令运行clang: clang++ -target x86_64-pc-windows-gnu -std=c
..
我想知道std::same_as是如何定义的,以及我们如何在概念或要求中使用它。 示例: void f1() { } bool f2() { return true; } template void Do( T func ) { if constexpr ( requires { { func() } -> std::same_as;
..
从C++20开始,可以使用auto模板参数实现整型常量: Try it online! template struct integral_constant2 : std::integral_constant {}; 它可以用来代替有两个模板参数的更冗长的变体std::integral_constant
..
我在阅读一些概念定义时,多次发现术语等于,如Swappable: 让t1和t2为保持相等表达式,这些表达式表示类型为T的不同的相等对象, 等于是否在标准中的某个位置定义?我猜想这意味着两个对象的语义或它们引用的值(赋予它们表示的域值的人类语义)是相同的,即使这两个对象不具有可比性(无operator==重载),或者类似的抽象(例如,如果a == b是有效的表达式,则两个对象a和b是相等
..
我在Github(https://github.com/Quuxplusone/coro/blob/master/examples/pythagorean_triples_generator.cpp)上查看了一个随机的C++示例,惊讶地发现它实际上可以编译(https://coro.godbolt.org/z/JXTX4Y)。 #include
..