【发布时间】: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 <boost/mpl/bool_fwd.hpp> -
@Jeaninez-MSFT 似乎奇怪的提升本身不包括这个,所以我担心我会掩盖一个问题。如果我更改为简单的
#include<boost/regex.hpp>,它会构建但找不到解释有什么不同。
标签: c++ boost visual-studio-2019 vcpkg