Subject: [Boost-bugs] [Boost C++ Libraries] #9003: Compiler error when trying to return and assign a vector of non-copyables but movables from a function in C++03
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-08-16 09:08:40
#9003: Compiler error when trying to return and assign a vector of non-copyables
but movables from a function in C++03
-------------------------------------------+------------------------------
Reporter: Adam Romanek <romanek.adam@â¦> | Type: Bugs
Status: new | Milestone: To Be Determined
Component: None | Version: Boost 1.54.0
Severity: Problem | Keywords:
-------------------------------------------+------------------------------
I get a compiler error when when trying to return and assign a vector of
non-copyables but movables from a function in C++03:
{{{
g++ -I/home/A.Romanek/tmp/boost/boost_1_54_0 -O3 main.cpp -o main
In file included from
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/container/allocator_traits.hpp:388:0,
from
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/container/detail/utilities.hpp:28,
from
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/container/vector.hpp:37,
from main.cpp:1:
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/preprocessor/iteration/detail/local.hpp:
In static member function âstatic void
boost::container::allocator_traits<Alloc>::priv_construct_dispatch2(boost::false_type,
Alloc&, T*, const P0&) [with T = non_copyable, P0 = non_copyable, Alloc =
std::allocator<non_copyable>, boost::false_type =
boost::integral_constant<bool, false>]â:
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/preprocessor/iteration/detail/local.hpp:37:1:
instantiated from âstatic void
boost::container::allocator_traits<Alloc>::priv_construct(boost::true_type,
Alloc&, T*, const P0&) [with T = non_copyable, P0 = non_copyable, Alloc =
std::allocator<non_copyable>, boost::true_type =
boost::integral_constant<bool, true>]â
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/preprocessor/iteration/detail/local.hpp:37:1:
instantiated from âstatic void
boost::container::allocator_traits<Alloc>::construct(Alloc&, T*, const
P0&) [with T = non_copyable, P0 = non_copyable, Alloc =
std::allocator<non_copyable>]â
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/container/detail/utilities.hpp:555:10:
instantiated from âtypename
boost::container::container_detail::disable_if_memcpy_copy_constructible<I,
F, F>::type boost::container::uninitialized_copy_alloc_n(A&, I, typename
std::iterator_traits<_II>::difference_type, F) [with A =
std::allocator<non_copyable>, I = non_copyable*, F = non_copyable*,
typename
boost::container::container_detail::disable_if_memcpy_copy_constructible<I,
F, F>::type = non_copyable*, typename
std::iterator_traits<_II>::difference_type = int]â
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/container/vector.hpp:734:7:
instantiated from âboost::container::vector<T, Allocator>::vector(const
boost::container::vector<T, Allocator>&) [with T = non_copyable, Allocator
= std::allocator<non_copyable>, boost::container::vector<T, Allocator> =
boost::container::vector<non_copyable>]â
main.cpp:14:49: instantiated from here
/home/A.Romanek/tmp/boost/boost_1_54_0/boost/preprocessor/iteration/detail/local.hpp:37:1:
error: passing âconst non_copyableâ as âthisâ argument of
ânon_copyable::operator boost::rv<non_copyable>&()â discards qualifiers
[-fpermissive]
}}}
The problem was discussed on Boost-users list: http://lists.boost.org
/boost-users/2013/08/79697.php
See the attachment for a code example.
The problem can be reproduced on gcc 4.6.3.
NOTE: using -std=c++0x makes the code example compile without any
problems.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/9003> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:13 UTC