Opened 12 years ago
Closed 10 years ago
#5274 closed Bugs (fixed)
failed to compile future.hpp with stlport 5.1.5 under msvc8.1, because of undefined class
Reported by: | anonymous | Owned by: | viboes |
---|---|---|---|
Milestone: | Boost 1.52.0 | Component: | thread |
Version: | Boost 1.50.0 | Severity: | Problem |
Keywords: | Cc: | viboes |
Description
f:\dev\adoxx512_boost\adoxx\include\stlport\stl/type_traits.h(249) : error C2139: 'boost::detail::future_waiter::registered_waiter' : an undefined class is no t allowed as an argument to compiler intrinsic type trait 'has_trivial_constructor'
f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(395) : see declaration of 'boost::detail::future_waiter::registered_waiter' f:\dev\adoxx512_boost\adoxx\include\stlport\stl/_vector.h(137) : see reference to class template instantiation 'stlpd_std::type_traits<_Tp>' being c
ompiled
with [
_Tp=boost::detail::future_waiter::registered_waiter
] f:\dev\adoxx512_boost\adoxx\include\stlport\stl/debug/_iterator.h(381) : see reference to class template instantiation 'stlpd_std::priv::_NonDbg_vecto
r<_Tp,_Alloc>' being compiled
with [
_Tp=boost::detail::future_waiter::registered_waiter, _Alloc=stlpd_std::allocator<boost::detail::future_waiter::registered_waiter>
] f:\dev\adoxx512_boost\adoxx\include\stlport\stl/debug/_vector.h(106) : see reference to class template instantiation 'stlpd_std::priv::construct_che
cker<_Container>' being compiled
with [
_Container=stlpd_std::priv::_NonDbg_vector<boost::detail::future_waiter::registered_waiter,stlpd_std::allocator<boost::detail::future_waiter::regi
stered_waiter>>
] f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(396) : see reference to class template instantiation 'stlpd_std::vector<_Tp>' being compil
ed
with [
_Tp=boost::detail::future_waiter::registered_waiter
]
f:\dev\adoxx512_boost\adoxx\include\stlport\stl/type_traits.h(250) : error C2139: 'boost::detail::future_waiter::registered_waiter' : an undefined class is no t allowed as an argument to compiler intrinsic type trait 'has_trivial_copy'
f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(395) : see declaration of 'boost::detail::future_waiter::registered_waiter'
f:\dev\adoxx512_boost\adoxx\include\stlport\stl/type_traits.h(251) : error C2139: 'boost::detail::future_waiter::registered_waiter' : an undefined class is no t allowed as an argument to compiler intrinsic type trait 'has_trivial_assign'
f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(395) : see declaration of 'boost::detail::future_waiter::registered_waiter'
f:\dev\adoxx512_boost\adoxx\include\stlport\stl/type_traits.h(252) : error C2139: 'boost::detail::future_waiter::registered_waiter' : an undefined class is no t allowed as an argument to compiler intrinsic type trait 'has_trivial_destructor'
f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(395) : see declaration of 'boost::detail::future_waiter::registered_waiter'
f:\dev\adoxx512_boost\adoxx\include\stlport\stl/type_traits.h(253) : error C2139: 'boost::detail::future_waiter::registered_waiter' : an undefined class is no t allowed as an argument to compiler intrinsic type trait 'is_pod'
f:\dev\adoxx512_boost\adoxx\include\boost/thread/future.hpp(395) : see declaration of 'boost::detail::future_waiter::registered_waiter'
workaround
class future_waiter {
struct registered_waiter;
typedef std::vector<registered_waiter>::size_type count_type;
typedef std::size_t count_type;
struct registered_waiter {
boost::shared_ptr<detail::future_object_base> future; detail::future_object_base::waiter_list::iterator wait_iterator; count_type index;
registered_waiter(boost::shared_ptr<detail::future_object_base> const& future_,
detail::future_object_base::waiter_list::iterator wait_iterator_, count_type index_):
future(future_),wait_iterator(wait_iterator_),index(index_)
{}
};
BOOST_MPL_ASSERT((boost::is_same<std::vector<registered_waiter>::size_type,std::size_t>));
Change History (10)
comment:1 by , 11 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:2 by , 11 years ago
Type: | Bugs → Support Requests |
---|
Moved to support request until resolution clarified.
comment:3 by , 11 years ago
Milestone: | To Be Determined |
---|---|
Resolution: | → worksforme |
Status: | assigned → closed |
Closed as no answer received. Please reopen it once you have checked it on 1.49 (trunk).
comment:4 by , 10 years ago
Resolution: | worksforme |
---|---|
Status: | closed → reopened |
Version: | Boost 1.46.0 → Boost 1.50.0 |
Still the same problem in 1.50.0. Changing the type trait "typedef std::vector<registered_waiter>::size_type count_type;" to the specific type "typedef std::size_t count_type;" fixed the problem as a quick workaround.
Environment is still the same, stlport 5.1.5 and msvc 8.1.
comment:5 by , 10 years ago
Could you add the error relative to the fact the stlport 5.1.5 doesn't defines std::vector<T>::size_type?
Are there any compiler flags that can be tested to check for stlport 5.1.5?
comment:6 by , 10 years ago
Just double checked, but stlport 5.1.5 does define size_type, and it is a public typedef to size_t. So this is fine from my point of view.
boost 1.50.0 was compiled without any additional compiler flags. If you want to try it out yourself, just grab a copy from stlport 5.1.5 from sourceforge and add it to the appropriate place in user config jam.
comment:7 by , 10 years ago
I think I've understood what is happening. I will replace
struct registered_waiter; typedef std::vector<registered_waiter>::size_type count_type;
by
struct registered_waiter; typedef std::vector<int>::size_type count_type;
As the type std::vector<T>::size_type should not depend on T.
comment:8 by , 10 years ago
Milestone: | → Boost 1.52.0 |
---|---|
Type: | Support Requests → Bugs |
comment:10 by , 10 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Merged from trunk [80450].
The proposed workaround corresponds to the existing code.
Could you tell us if the version 1.49 has yet the error?