You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2005/12/30 19:27:02 UTC

[jira] Commented: (STDCXX-89) bug in algorithm.cc

    [ http://issues.apache.org/jira/browse/STDCXX-89?page=comments#action_12361438 ] 

Martin Sebor commented on STDCXX-89:
------------------------------------

I think the problem you're running into is reproduced in the test case bellow. While the current standard is not 100% clear about this I agree that the test case should compile without an error. I believe library issue 270 (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#270) makes it clear.

$ cat t.cpp && nice make t
#include <algorithm>

struct A { };
struct B { };

bool operator< (A, B) { return false; }

int main ()
{
    A a;
    std::lower_bound (&a, &a, B ());
}
eccp -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/build/sebor/eccp-3.6-11s/include -I/build/sebor/dev/stdlib/include -I/build/sebor/dev/stdlib/examples/include  -A -x --template_directory=/build/sebor/eccp-3.6-11s/lib -g  --display_error_number --remarks --diag_suppress 193,236,340,401,261,479,487,678,679,815  t.cpp
"/build/sebor/dev/stdlib/include/algorithm.cc", line 1180: error #304: no
          instance of function "__rw::__rw_lt<_TypeT>::operator() [with
          _TypeT=std::iterator_traits<A *>::value_type]" matches the argument
          list
            argument types are: (A, const B)
            object type is: __rw::__rw_lt<std::iterator_traits<A
                      *>::value_type>
          if (__comp (*__middle, __val)) {
              ^
          detected during:
            instantiation of "_RandomAccessIter
                      std::__lower_bound(_RandomAccessIter, _RandomAccessIter,
                      const _TypeT &, _Compare, _Dist *,
                      std::random_access_iterator_tag) [with
                      _RandomAccessIter=A *, _TypeT=B,
                      _Compare=__rw::__rw_lt<std::iterator_traits<A
                      *>::value_type>, _Dist=std::iterator_traits<A
                      *>::difference_type]" 
            compilation of secondary translation unit
                      "/build/sebor/dev/stdlib/src/export.cpp"

1 error detected in the compilation of "t.cpp".
make: *** [t.o] Error 2

> bug in algorithm.cc
> -------------------
>
>          Key: STDCXX-89
>          URL: http://issues.apache.org/jira/browse/STDCXX-89
>      Project: STDCXX
>         Type: Bug
>   Components: 25. Algorithms
>     Versions: 4.1.3
>  Environment: HP-UX 11.23, aCC: HP aC++/ANSI C B3910B A.06.06 [Nov 7 2005]
>     Reporter: Duraid Madina
>  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/algorithm.cc", 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 *const)
>             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 http://kinoko.c.u-tokyo.ac.jp/~duraid/stdcxxissues 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, http://www.llvm.org)
> 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:
> aCC -D__STDC_LIMIT_MACROS -AA -DNDEBUG -D_RWSTDDEBUG     -D_RWSTD_USE_CONFIG   +d  +w +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:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira