gpt4 book ai didi

c++ - 为什么创建 `std::regex` 违反概念?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:20 26 4
gpt4 key购买 nike

#define _GLIBCXX_CONCEPT_CHECKS
#include <regex>
void f() { std::regex r("hello"); }

当上面is compiled作为 GCC 或 Clang 中的 C++11,会生成一个巨大的模板错误,其关键部分似乎是:

/opt/gcc-5.3.0/include/c++/5.3.0/bits/boost_concept_check.h:206:11: error: use of deleted function 'std::__detail::_StateSeq >& std::__detail::_StateSeq >::operator=(const std::__detail::_StateSeq >&)'
__a = __a; // require assignment operator
^

但猜测一下这意味着什么,我注意到 std::regex does have an assignment operator .

此外,据我了解,启用概念不应改变代码是否编译。但是,删除 #define 使其可以编译。


两部分问题:

  1. 此错误及其仅在启用概念时出现的行为是否正确?
  2. 如果是,我应该如何制作正则表达式?

最佳答案

将您的代码更改为以下内容:

#include <regex>
#define _GLIBCXX_CONCEPT_CHECKS
void f() { std::regex r("hello"); }

这将禁用正则表达式库代码的概念检查,但会为您想在此编译单元中执行的任何其他操作保留概念检查。基本上,您拥有的正则表达式库的版本与您的编译器版本检查的概念检查不兼容。在使用 C++ 11 的 GCC 5.3 或更低版本中会出现此错误,但在同样使用 C++ 11 的 GCC 6.1 或更高版本中则不会出现此错误。

关于c++ - 为什么创建 `std::regex` 违反概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39091689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com