stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <>
Subject [jira] Commented: (STDCXX-89) compilation error on std::lower_bound<Iterator, T>() with Iterator::value_type != T
Date Fri, 30 Dec 2005 23:50:07 GMT
    [ ] 

Martin Sebor commented on STDCXX-89:

Thanks for the patch! I agree with the proposed fix in concept but there is one important
case that the patch doesn't take into account that we need to handle: the patch relies on
partial specialization of class templates which may not be available with some older compilers
(when the config macro _RWSTD_NO_PARTIAL_CLASS_SPEC is #defined). An example of one such compiler
that is still in widespread use is MSVC 6.
In addition, I believe we can simplify the general case and reduce the number of specializations
of the predicate forms of the algorithm(s) implicitly instantiated from the non-predicate
form by making the __rw_lt template into an ordinary (non-template) class and parametrizing
the operator() member function on the types of its arguments. I will commit the patch with
this feature shortly -- please give it a try and let us know how it works out for you!

> compilation error on std::lower_bound<Iterator, T>() with Iterator::value_type
!= T
> -----------------------------------------------------------------------------------
>          Key: STDCXX-89
>          URL:
>      Project: STDCXX
>         Type: Bug
>   Components: 25. Algorithms
>     Versions: 4.1.3
>  Environment: all
>     Reporter: Duraid Madina
>     Assignee: Martin Sebor
>  Attachments: stdcxx-comparison.patch
> On both the released ("incubating") and current subversion trunk versions of stdcxx,
I trip across the following - I think it is your bug: 
> "/home/duraid/stdcxx/include/", line 1180: error #2304: no instance of function
"__rw::__rw_lt<_TypeT>::operator() [with _Type
> T=std::iterator_traits<__rw::__rw_debug_iter<std::vector<llvm::GlobalValue *,
std::allocator<llvm::GlobalValue *>>, std::vector<llvm::Glob
> alValue *, std::allocator<llvm::GlobalValue *>>::pointer, std::vector<llvm::GlobalValue
*, std::allocator<llvm::GlobalValue *>>::pointer>>
> ::value_type]" matches the argument list
>             argument types are: (std::iterator_traits<__rw::__rw_debug_iter<std::vector<llvm::GlobalValue
*, std::allocator<llvm::GlobalVa
> lue *>>, std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>::pointer, std::vector<llvm::GlobalValue *, std::allocator<l
> lvm::GlobalValue *>>::pointer>::iterator_type>::value_type, const llvm::GlobalValue
>             object type is: __rw::__rw_lt<std::iterator_traits<__rw::__rw_debug_iter<std::vector<llvm::GlobalValue
*, std::allocator<llvm:
> :GlobalValue *>>, std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>::pointer, std::vector<llvm::GlobalValue *, std::al
> locator<llvm::GlobalValue *>>::pointer>>::value_type>
>           if (__comp (*__middle, __val)) {
>               ^
>           detected during instantiation of "_RandomAccessIter std::__lower_bound(_RandomAccessIter,
_RandomAccessIter, const _TypeT &, _Co
> mpare, _Dist *, std::random_access_iterator_tag) [with _RandomAccessIter=__rw::__rw_debug_iter<std::vector<llvm::GlobalValue
*, std::alloc
> ator<llvm::GlobalValue *>>, std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>::pointer, std::vector<llvm::GlobalValue 
> *, std::allocator<llvm::GlobalValue *>>::pointer>, _TypeT=const llvm::GlobalValue
*, _Compare=__rw::__rw_lt<std::iterator_traits<__rw::__r
> w_debug_iter<std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>, std::vector<llvm::GlobalValue *, std::allocator<llvm::
> GlobalValue *>>::pointer, std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>::pointer>>::value_type>, _Dist=std::iterat
> or_traits<__rw::__rw_debug_iter<std::vector<llvm::GlobalValue *, std::allocator<llvm::GlobalValue
*>>, std::vector<llvm::GlobalValue *, st
> d::allocator<llvm::GlobalValue *>>::pointer, std::vector<llvm::GlobalValue
*, std::allocator<llvm::GlobalValue *>>::pointer>>::difference_
> type]"
> Please see if you want to try and
reproduce this. There, you will find the following files:
> DataStructure.cpp: the code I'm trying to build (it is a part of LLVM,
> Note: the problem is the const keyword on line 694 (const GlobalValue *V = Src[0]; )
- removing that keyword allows the file to be compiled, but I think the const keyword should
be legal there.
> algorithmcc_bug.i: (preprocessed source: you should be able to compile this with aCC
as follows:
+W392 +W655 +W684 +W818 +W819 +W849 +W2193 +W2236 +W2261 +W2401 +W2487 +O2  -c algorithmcc_bug.i
> compile_log: what I see when trying to compile DataStructure.cpp with the const keyword
present (grep for the error #2304)
> If you would like an account on the machine where I see this, just let me know!

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message