public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/33605]  New: Comparable concepts cause errors with abstract types
@ 2007-09-30 22:42 gcc at david dot osborn dot name
  2007-09-30 22:48 ` [Bug libstdc++/33605] " gcc at david dot osborn dot name
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: gcc at david dot osborn dot name @ 2007-09-30 22:42 UTC (permalink / raw)
  To: gcc-bugs

The following code fails because __gnu_cxx::_LessThanOpConcept has member
variables of type <iterator>::value_type, where <iterator> is an iterator over
an abstract type.  20.1.2 (LessThanComparable) doesn't mention that the type
has to be concrete.

#define _GLIBCXX_CONCEPT_CHECKS
#include <algorithm>
#include <tr1/memory>
#include <vector>
#include <boost/iterator/indirect_iterator.hpp>

struct AbstractThing
{
        virtual void F() = 0; // comment this out and it works
};
struct ConcreteThing : AbstractThing
{
        void F() {}
};
bool operator <(const AbstractThing &, const AbstractThing &)
{
        return false;
}

int main()
{
        typedef std::vector<std::tr1::shared_ptr<AbstractThing> > Things;
        Things things;
        std::lower_bound(
                boost::make_indirect_iterator(things.begin()),
                boost::make_indirect_iterator(things.end()), ConcreteThing());
}

$ g++ -I../../../boost.1.34.0 -otest test.cpp
C:/devel/mingw/include/c++/4.2.1/bits/boost_concept_check.h: In instantiation
of
 '__gnu_cxx::_LessThanOpConcept<AbstractThing, ConcreteThing>':
C:/devel/mingw/include/c++/4.2.1/bits/boost_concept_check.h:63:   instantiated
f
rom 'void __gnu_cxx::__function_requires() [with _Concept =
__gnu_cxx::_LessThan
OpConcept<AbstractThing, ConcreteThing>]'
C:/devel/mingw/include/c++/4.2.1/bits/stl_algo.h:2894:   instantiated from
'_For
wardIterator std::lower_bound(_ForwardIterator, _ForwardIterator, const _Tp&)
[w
ith _ForwardIterator =
boost::indirect_iterator<__gnu_cxx::__normal_iterator<std
::tr1::shared_ptr<AbstractThing>*,
std::vector<std::tr1::shared_ptr<AbstractThin
g>, std::allocator<std::tr1::shared_ptr<AbstractThing> > > >,
boost::use_default
, boost::use_default, boost::use_default, boost::use_default>, _Tp =
ConcreteThi
ng]'
test.cpp:26:   instantiated from here
C:/devel/mingw/include/c++/4.2.1/bits/boost_concept_check.h:299: error: cannot
d
eclare field '__gnu_cxx::_LessThanOpConcept<AbstractThing, ConcreteThing>::__a'
to be of abstract type 'AbstractThing'
test.cpp:8: note:   because the following virtual functions are pure within
'Abs
tractThing':
test.cpp:9: note:       virtual void AbstractThing::F()


-- 
           Summary: Comparable concepts cause errors with abstract types
           Product: gcc
           Version: 4.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: gcc at david dot osborn dot name
 GCC build triplet: i686-pc-mingw32
  GCC host triplet: i686-pc-mingw32
GCC target triplet: i686-pc-mingw32


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33605


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/33605] Comparable concepts cause errors with abstract types
  2007-09-30 22:42 [Bug libstdc++/33605] New: Comparable concepts cause errors with abstract types gcc at david dot osborn dot name
@ 2007-09-30 22:48 ` gcc at david dot osborn dot name
  2007-10-01 10:06 ` pcarlini at suse dot de
  2007-11-01 19:57 ` pcarlini at suse dot de
  2 siblings, 0 replies; 4+ messages in thread
From: gcc at david dot osborn dot name @ 2007-09-30 22:48 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from gcc at david dot osborn dot name  2007-09-30 22:48 -------
Created an attachment (id=14275)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14275&action=view)
Patch for predicate and arithmetic constraints

This patch fixes the immediate problem, but I think there may be other
instances of this issue in bits/boost_concept_check.h.  See this comment:

// possibly should be "Tp* a;" and then dereference "a" in constraint
// functions?  present way would require a default ctor, i think...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33605


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/33605] Comparable concepts cause errors with abstract types
  2007-09-30 22:42 [Bug libstdc++/33605] New: Comparable concepts cause errors with abstract types gcc at david dot osborn dot name
  2007-09-30 22:48 ` [Bug libstdc++/33605] " gcc at david dot osborn dot name
@ 2007-10-01 10:06 ` pcarlini at suse dot de
  2007-11-01 19:57 ` pcarlini at suse dot de
  2 siblings, 0 replies; 4+ messages in thread
From: pcarlini at suse dot de @ 2007-10-01 10:06 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from pcarlini at suse dot de  2007-10-01 10:06 -------
The most recent boost release (1.34.1) of those checks uses the same code of
our adaption. Given that, and given of course that we are finally in the era of
real concepts in the core language for the forthcoming new standard, I don't
think we should change anything non-trivial in this area: in any case a
library-only solution will be always affected by serious problems.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33605


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug libstdc++/33605] Comparable concepts cause errors with abstract types
  2007-09-30 22:42 [Bug libstdc++/33605] New: Comparable concepts cause errors with abstract types gcc at david dot osborn dot name
  2007-09-30 22:48 ` [Bug libstdc++/33605] " gcc at david dot osborn dot name
  2007-10-01 10:06 ` pcarlini at suse dot de
@ 2007-11-01 19:57 ` pcarlini at suse dot de
  2 siblings, 0 replies; 4+ messages in thread
From: pcarlini at suse dot de @ 2007-11-01 19:57 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from pcarlini at suse dot de  2007-11-01 19:57 -------
Really, let's not spend time on this, for the just mentioned reasons.


-- 

pcarlini at suse dot de changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |WONTFIX


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33605


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-11-01 19:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-09-30 22:42 [Bug libstdc++/33605] New: Comparable concepts cause errors with abstract types gcc at david dot osborn dot name
2007-09-30 22:48 ` [Bug libstdc++/33605] " gcc at david dot osborn dot name
2007-10-01 10:06 ` pcarlini at suse dot de
2007-11-01 19:57 ` pcarlini at suse dot de

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).