【发布时间】:2012-10-06 21:45:56
【问题描述】:
我有一个无法使用 boost::format 的新项目。我收到一个编译器错误,抱怨 boost 对虚函数 ~basic_altstringbuf 的覆盖缺少“throw()”。即使是最简单的使用 boost::format 的尝试也是如此。
我还有其他项目运行良好。我已经验证新项目使用相同的包含路径进行 boost 和 VC++ 包含。所有项目都将“启用 C++ 异常”设置为“是”。我能想到的唯一解释是,工作的项目有一些#DEFINE 或一些设置,这些设置会禁用 std:: 包含文件中的那些恶意异常规范。但我不知道它可能是什么或在哪里。有什么想法吗?
错误 1 错误 C2694: 'boost::io::basic_altstringbuf::~basic_altstringbuf(void)': 重写虚函数的异常规范比基类虚成员函数 'std::basic_streambuf<_elem> 的限制更少: :~basic_streambuf(void) throw()
编辑:推论问题:VS++ 2012 中是否有一个 Properties-item 会导致 std:: 头文件被包含在没有异常规范的情况下? - 没有关闭异常,是吗?
【问题讨论】:
-
什么版本的Boost?试试最新版本?如果是最新版本,请在 boost Trac 问题跟踪器中提交错误,因为 VC++ 2012 的编译器检测显然失败
-
@sehe Boost 版本 boost-1.51。它不会在另一个使用相同编译器的项目中失败。两者都使用 v110。我对两者都使用了相同的 boost 包含文件,但作为一个测试,我尝试使用我在本地编译的 boost 中的第一个包含文件和我从网络上预先构建的第二个包含文件。两者都一样。适用于其他项目,不适用于新项目。新的肯定有所不同,但我不知道那可能是什么。
标签: visual-c++ exception boost boost-format