【问题标题】:Compile error inside boost: "use of undefined type 'boost::mpl::bool_<true>"boost内部的编译错误:“使用未定义的类型'boost::mpl::bool_<true>”
【发布时间】:2021-07-26 14:06:18
【问题描述】:

我在编译大型 CPP 文件时遇到了这个奇怪的错误,在这一行:

#include <boost/regex/v4/regex.hpp>

错误 C2027 使用未定义类型 '升压::mpl::bool_' C:\github\microsoft\vcpkg\installed\x86-windows\include\boost\regex\v4\basic_regex_parser.hpp 59

在 bool_fwd.hpp 我看到:

typedef bool_<true> true_;
typedef bool_<false> false_;

在 basic_regex_parser.hpp 中,这是产生错误的行:

inline boost::intmax_t umax()
{
   return umax(mpl::bool_<std::numeric_limits<boost::intmax_t>::digits >= std::numeric_limits<std::size_t>::digits>());
}

似乎basic_regex_parser.hpp 不包括bool_fwd.hpp,但深入研究这些文件我迷失了问题所在。

我已将 #include 移动到我的 stdafx.h 文件的顶部,因此它位于任何其他标题之前,并获得相同的结果。我们最近从通过 vcpkg 手动构建 boost 1.68 => 1.76 切换,但我不知道是哪个原因。我们还切换到 C++17,我注意到 boost 依赖于 std::numeric_limits,这可能是问题吗?

【问题讨论】:

  • 我不确定为什么我们包含这个特定的文件...但我在一个全新的项目中进行了测试,该项目没有做任何其他事情并遇到同样的问题。
  • Compiler Error C2027A 类型在定义之前不能使用。要解决该错误,请确保在引用之前完全定义类型。我建议你应该添加#include &lt;boost/mpl/bool_fwd.hpp&gt;
  • @Jeaninez-MSFT 似乎奇怪的提升本身不包括这个,所以我担心我会掩盖一个问题。如果我更改为简单的#include&lt;boost/regex.hpp&gt;,它会构建但找不到解释有什么不同。

标签: c++ boost visual-studio-2019 vcpkg


【解决方案1】:

不支持此功能,请参阅 https://github.com/boostorg/regex/issues/145 中的相同问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多