I experimented the following:
In a fresh copy of boost trunk r86347, I made the following change:
1. go in boost/config/compiler/visualc.hpp
2. replace
// C++11 features supported by VC++ 12 (aka 2013).
//
#if _MSC_FULL_VER < 180020827
# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_NO_CXX11_DELETED_FUNCTIONS
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
# define BOOST_NO_CXX11_RAW_LITERALS
# define BOOST_NO_CXX11_TEMPLATE_ALIASES
# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
#endif
// variadic templates are supposed to be supported by VC++ 12
// but VC++ 12 RC variadic support is causing boost regression
// test failures for signals2 and several of its dependencies.
#define BOOST_NO_CXX11_VARIADIC_TEMPLATES
by
// C++11 features supported by VC++ 12 (aka 2013).
//
#if _MSC_FULL_VER < 180020827
# define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
# define BOOST_NO_CXX11_DELETED_FUNCTIONS
# define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
# define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
# define BOOST_NO_CXX11_RAW_LITERALS
# define BOOST_NO_CXX11_TEMPLATE_ALIASES
# define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
# define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
// variadic templates are supposed to be supported by VC++ 12
// but VC++ 12 RC variadic support is causing boost regression
// test failures for signals2 and several of its dependencies.
# define BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif
3. compile boost with vc12 - no error in the log, I checked this time but I
didn't try to run the tests;
Doing this fixes synchronized_value for me.
However, there is a strange compilation error I can't decipher with
flat_set and flat_map.
Compiling:
#include
boost::container::flat_map foo;
Generates the following error (please ignore the file names, I replaced all
the code by the code above):
1>e:\projects\sdk\boost\boost\include\boost-1_55\boost\intrusive\detail\has_member_function_callable_with.hpp(200):
error C2228: left of '.select_on_container_copy_construction' must have
class/struct/union
1> type is 'boost::move_detail::add_rvalue_reference<U>::type'
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\intrusive\detail\has_member_function_callable_with.hpp(276)
: see reference to class template instantiation
'boost::container::container_detail::has_member_function_callable_with_select_on_container_copy_construction_impl'
being compiled
1> with
1> [
1> Fun=std::allocator>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\allocator_traits.hpp(262)
: see reference to class template instantiation
'boost::container::container_detail::has_member_function_callable_with_select_on_container_copy_construction' being compiled
1> with
1> [
1> Alloc=std::allocator>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\flat_map.hpp(113)
: see reference to class template instantiation
'boost::container::allocator_traits<Allocator>' being compiled
1> with
1> [
1> Allocator=std::allocator>
1> ]
1>
e:\projects\games\netrush\netrush_projects\projects\netrush\system\view\tests\anyvalueset.cpp(288)
: see reference to class template instantiation
'boost::container::flat_map>>'
being compiled
1> with
1> [
1> Key=int
1> , T=int
1> ]
Build has been canceled.
With the following code:
#include
boost::container::flat_set foo;
I get these errors:
1>e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\detail\flat_tree.hpp(50):
error C2516: 'Compare' : is not a legal base class
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\detail\flat_tree.hpp(110)
: see declaration of 'Compare'
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\detail\flat_tree.hpp(110)
: see reference to class template instantiation
'boost::container::container_detail::flat_tree_value_compare'
being compiled
1> with
1> [
1> Compare=int
1> , Value=int
1> ,
KeyOfValue=boost::container::container_detail::identity<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\detail\flat_tree.hpp(170)
: see reference to class template instantiation
'boost::container::container_detail::flat_tree::Data'
being compiled
1> with
1> [
1> Key=int
1> , Compare=int
1> , Allocator=std::allocator<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\flat_set.hpp(75)
: see reference to class template instantiation
'boost::container::container_detail::flat_tree'
being compiled
1> with
1> [
1> Key=int
1> , Compare=int
1> , Allocator=std::allocator<int>
1> ]
1>
e:\projects\games\netrush\netrush_projects\projects\netrush\system\view\tests\anyvalueset.cpp(288)
: see reference to class template instantiation
'boost::container::flat_set' being compiled
1> with
1> [
1> Key=int
1> ]
1>e:\projects\sdk\boost\boost\include\boost-1_55\boost\intrusive\detail\has_member_function_callable_with.hpp(200):
error C2228: left of '.select_on_container_copy_construction' must have
class/struct/union
1> type is 'boost::move_detail::add_rvalue_reference<U>::type'
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\intrusive\detail\has_member_function_callable_with.hpp(276)
: see reference to class template instantiation
'boost::container::container_detail::has_member_function_callable_with_select_on_container_copy_construction_impl'
being compiled
1> with
1> [
1> Fun=std::allocator<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\allocator_traits.hpp(262)
: see reference to class template instantiation
'boost::container::container_detail::has_member_function_callable_with_select_on_container_copy_construction' being compiled
1> with
1> [
1> Alloc=std::allocator<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\vector.hpp(279)
: see reference to class template instantiation
'boost::container::allocator_traits<Allocator>' being compiled
1> with
1> [
1> Allocator=std::allocator<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\vector.hpp(550)
: see reference to class template instantiation
'boost::container::container_detail::vector_alloc_holder>' being compiled
1> with
1> [
1> Allocator=std::allocator<int>
1> ]
1>
e:\projects\sdk\boost\boost\include\boost-1_55\boost\container\detail\flat_tree.hpp(167)
: see reference to class template instantiation
'boost::container::vector' being compiled
1> with
1> [
1> Value=int
1> , A=std::allocator<int>
1> ]
Build has been canceled.
So I'm not sure if it's related to variadic templates activated or not but
it don't look so.
I'll reported this in the tracker:
https://svn.boost.org/trac/boost/ticket/9267