std::list can have a throwing move constructor.
std::vector of such lists makes copies when growing its storage array,
it doesn't move them.
render_thunk_list is noncopyable (because render_thunk is noncopyable),
and so can't be stored in std::vector in some STL implementations.
Wrapping render_thunk in std::unique_ptr is one extra allocation per
element, with no purpose. The somewhat costly xyz_render_thunk move
constructor is only called once upon insertion, regardless of whether
we're emplacing render_thunk or unique_ptr.
transform_node(boost::value_initialized<T> const&)
: base_() {}
``` to address
```c:\mb\windows-builds-64\packages\mapnik-windows\include\mapnik/transform_expression.hpp(175):
error C2664: 'mapbox::util::variant<mapnik::identity_node,mapnik::matrix_node,mapnik::translate_node,mapnik::scale_node,mapnik::rotate_node,mapnik::skewX_node,mapnik::skewY_node>::variant(mapbox::util::variant<mapnik::identity_node,mapnik::matrix_node,mapnik::translate_node,mapnik::scale_node,mapnik::rotate_node,mapnik::skewX_node,mapnik::skewY_node> &&) noexcept(false)':
cannot convert argument 1 from 'const boost::value_initialized<T>' to 'mapbox::util::no_init' [c:\mb\windows-builds-64\packages\mapnik-windows\mapnik-gyp\build\mapnik.vcxproj]
```
when building with VS2017 RC
Revert "move BOOST_SPIRIT_DEFINE into separate headers + use across all grammar defs (#3573)"
This reverts commit 81cfa721db.
Revert "windows : fix errors C3259 + C3249"
This reverts commit 8327905aba.
Revert "Workaround for VC++ C2995 via redifining BOOST_SPIRIT_DEFINE macro (#3573)"
This reverts commit 2a2f0bf00a.
- fixes#3570
- avoids recursive exception-specification on value constructor
by only constructing a temporary for arithmetic types (everything
else passes a reference to the base variant constructor)
- also removes `is_same<decay_t<T>, value>` SFINAE check -- because
we're only passing a reference down, explicitly forcing the compiler
to use the implicitly-defined copy/move instead is pointless