使用Visual Studio 2013(Express)构建强大功能

ksl*_*ksl 12 c++ boost visual-studio-2013

有没有人使用Visual Studio 2013 Express成功构建Boost?

正如Boost网站所述,我对此是否可行感到困惑:

Visual Studio 2013/Visual C++ 12的已知错误.

Visual Studio 2013在发布过程中很晚才发布,因此存在一些未解决的问题.这些包括:

由于缺少include,序列化无法编译.

使用Boost.Container的allocator_traits中的has_member_function_callable_with会导致编译错误(#9332).

在诸如Unordered和MultiIndex之类的库中,使用初始化程序列表调用重载函数会导致编译错误,Visual C++声称重载是不明确的.这是一个Visual C++错误,目前尚不清楚是否有一个好的解决方法.这不会影响不使用初始化程序列表的代码,也不会使用不需要隐式转换的初始化程序列表(即容器的确切值类型的初始化程序列表).

线程:ex_scoped_thread编译失败(#9333).

但是,这张海报说可以在没有任何补丁的情况下使用VS 2013构建Boost 1.55.0.

我曾尝试使用VS 2013构建Boost,但我确实至少得到了序列化错误.

seh*_*ehe 18

我最近使用一个小补丁在MSVC12(VS2013)上构建了Boost:

主题:[PATCH]修复MSVC2013上的boost序列化构建

include fix(manual)
config_decltype_n3276_new.patch(来自https://svn.boost.org/trac/boost/ticket/9410)

正如您所看到的,它结合了https://svn.boost.org/trac/boost/ticket/9410中的补丁 和一些手动包含修复程序(它们是微不足道的).

这是有效的补丁:

diff --git a/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp b/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
index 5a5c7b7..8da85ee 100644
--- a/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
+++ b/3rdparty/boost_1_55_0/boost/archive/iterators/transform_width.hpp
@@ -29,6 +29,7 @@

#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/iterator/iterator_traits.hpp>
+#include <algorithm>

namespace boost { 
namespace archive {
diff --git a/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp b/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
index 695fa94..1c0f4f0 100644
--- a/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
+++ b/3rdparty/boost_1_55_0/boost/config/compiler/visualc.hpp
@@ -180,13 +180,13 @@
#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
+#  define BOOST_NO_CXX11_DECLTYPE_N3276
#endif

// C++11 features not supported by any versions
#define BOOST_NO_CXX11_CHAR16_T
#define BOOST_NO_CXX11_CHAR32_T
#define BOOST_NO_CXX11_CONSTEXPR
-#define BOOST_NO_CXX11_DECLTYPE_N3276
#define BOOST_NO_CXX11_NOEXCEPT
#define BOOST_NO_CXX11_UNICODE_LITERALS
#define BOOST_NO_SFINAE_EXPR
diff --git a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
index 216300c..1c0e6c7 100644
--- a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
+++ b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_fail.cpp
@@ -32,6 +32,6 @@

int main( int, char *[] )
{
-   return boost_no_decltype_n3276::test();
+   return boost_no_cxx11_decltype_n3276::test();
}

diff --git a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
index 35427be..86e3664 100644
--- a/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
+++ b/3rdparty/boost_1_55_0/libs/config/test/no_decltype_n3276_pass.cpp
@@ -27,11 +27,11 @@
#ifndef BOOST_NO_CXX11_DECLTYPE_N3276
#include "boost_no_decltype_n3276.ipp"
#else
-namespace boost_no_decltype_n3276 = empty_boost;
+namespace boost_no_cxx11_decltype_n3276 = empty_boost;
#endif

int main( int, char *[] )
{
-   return boost_no_decltype_n3276::test();
+   return boost_no_cxx11_decltype_n3276::test();
}
Run Code Online (Sandbox Code Playgroud)

即使使用EPA Portable Archive实现,序列化也能很好地工作

免责声明这是'常规'Visual Studio.它可能适用于VS Express.(如果您有Windows SDK)

  • 我可以:)首先,您可以只读它并手动应用它(它是人类可读的,总共只有9行).我刚刚清理了一下补丁(偶然包含了一个冗余补丁文件).有关更多说明,我建议[搜索SO](http://stackoverflow.com/search?tab=votes&q=%5bpatch%5d%20apply).祝好运 (2认同)